#include<bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
typedef long long LL;
int size[MAXN]; 
bool vis[MAXN];
vector<int> edge[MAXN];
LL ans;
char a[MAXN];
int root,totsize,maxSize;
void calc(int u,int fa)
{
	size[u] = 1;
	for (int v:edge[u])
	{
		if (v!=fa && vis[v]==false)
		{
			calc(v,u);
			size[u]+=size[v];
		}
	}
}
int getRoot(int u,int fa)
{
	int mx = -1;
	for (int v:edge[u])
	{
		if (v!=fa && vis[v]==false)
		{
			getRoot(v,u);
			mx = max(mx,size[v]);
		}
	}
	mx = max(mx,totsize - size[u]);
	if (mx < maxSize)
	{
		maxSize = mx;
		root = u;
	}
}
int search(int u,int fa)
{
	maxSize = 1e9; 
	calc(u,fa);
	totsize = size[u];
	getRoot(u,fa);
	return root;
}
void dfs()
{//Ìí¼ÓÐÞ¸Ä 
}
void solve(int u,int fa)
{
	if (fa!=-1) vis[fa] = true;
	int newroot = search(u,fa);
	//Ìí¼ÓÐÞ¸Ä 
}
int main()
{
	int n;
	scanf("%d\n",&n);
	for (int i=1;i<=n;i++) scanf("%c",a+i);
	for (int i=0;i<n-1;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		edge[x].push_back(y);
		edge[y].push_back(x);
	}
	solve(1,-1);
}
