#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n, c[N];
vector<int> g[N];
bool ok[N];
void dfs(int u, int p) {
  ok[u] = 1;
  for (int i = 0; i < g[u].size(); i++) {
    int v = g[u][i];
    if (v != p) {
      dfs(v, u);
      ok[u] &= (ok[v] && c[u] == c[v]);
    }
  }
}
void solve(int u, int p, bool e) {
  vector<int> no;
  for (int i = 0; i < g[u].size(); i++) {
    int v = g[u][i];
    if (v == p) continue;
    if (!ok[v]) no.push_back(v);
  }
  if (no.size() == 0) {
    puts("YES");
    printf("%d\n", u);
    exit(0);
  }
  if (no.size() >= 2) {
    puts("NO");
    exit(0);
  }
  for (int i = 0; i < g[u].size(); i++) {
    int v = g[u][i];
    if (v == p) continue;
    if (v != no[0] && c[v] != c[u]) {
      puts("NO");
      exit(0);
    }
  }
  if (e) {
    puts("NO");
    exit(0);
  } else {
    solve(no[0], u, c[no[0]] != c[u]);
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin >> n;
  for (int i = 1; i <= n - 1; i++) {
    int u, v;
    cin >> u >> v;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  for (int i = 1; i <= n; i++) cin >> c[i];
  dfs(1, 0);
  solve(1, 0, 0);
  return 0;
}
