#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
struct tree{
    int arr[27];
    tree(){
        memset(arr,0,sizeof arr);
    }
}ans[N];
char c[N];
std::vector<int>gp[N];
 
void dfs(int s,int p){
    ans[s].arr[0] = 1;
    ans[s].arr[c[s]-'a'+1] = 1;
    for(auto u:gp[s]){
        if(u != p){
            dfs(u,s);
            for(int i = 0; i < 27; i++){
                ans[s].arr[i] += ans[u].arr[i];
            }
        }
    }
}
 
int main()
{
    int n;
    cin>>n;
    for(int i = 1; i <= n; i++)cin>>c[i];
    for(int i = 1; i < n; i++){
        int a,b;
        cin>>a>>b;
        gp[a].push_back(b);
        gp[b].push_back(a);
    }
    string s;
    cin>>s;
    
    dfs(1,0);
    int m[30] = {0};
    for(auto u:s)m[u-'a'+1]++;
    
    int ans1 = N;
    for(int i = 1; i <= n;i++){
    	bool ok = 1;
    	for(int j = 1; j<27;j++){
        	ok &= (ans[i].arr[j]>= m[j]);
        }
        if(ok){
            ans1 = min(ans1,ans[i].arr[0]);
        }
    }
    
    if(ans1 == N)cout<<-1<<"\n";
    else cout<<ans1<<"\n";
 
    return 0;
}