#include <bits/stdc++.h>
int n;
struct side {
  int u, v;
};
side s[2 * 100010];
int flage[100010], c[2 * 100010];
int main() {
  int i, j, k;
  int tot = 0;
  scanf("%d", &n);
  for (i = 1; i <= n - 1; i++) {
    scanf("%d%d", &s[i].u, &s[i].v);
  }
  for (i = 1; i <= n; i++) {
    scanf("%d", &c[i]);
  }
  for (i = 1; i <= n - 1; i++) {
    if (c[s[i].u] != c[s[i].v]) {
      tot++;
      flage[s[i].v]++;
      flage[s[i].u]++;
    }
  }
  if (tot == 0) {
    printf("YES\n1");
    return 0;
  } else {
    for (i = 1; i <= 100009; i++) {
      if (flage[i] == tot) {
        printf("YES\n%d", i);
        return 0;
      }
    }
  }
  printf("NO");
  return 0;
}
