void solve {
int n;
std::cin >> n;
std::string s;
std::cin >> s;
s = '&' + s;
std::vector<std::vector<int>> adj(n + 1);
for (int i = 1; i < n; i++) {
int u, v;
std::cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
bool ok = true;
auto dfs = [&](auto dfs, int u, int fa) {
if (s[u] == '?') s[u] = s[fa] == 'd' ? 'p' : 'd';
else if (s[u] == s[fa]) {
ok = false;
return ;
}
for (auto x : adj[u]) {
if (x == fa) continue ;
dfs(dfs, x, u);
}
};
dfs(dfs, 1, 0);
if (ok) {
for (int i = 1; i <= n; i++) {
std::cout << s[i];
}
std::cout << "\n";
} else {
std::cout << "-1\n";
}
}