#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void setmin(T &x, T y) {
  if (y < x) x = y;
}
template <typename T>
inline void setmax(T &x, T y) {
  if (y > x) x = y;
}
template <typename T>
inline T gcd(T a, T b) {
  while (b) swap(a %= b, b);
  return a;
}
const int MAX = 3e5;
const int INF = 1e9 + 7;
const long long BIG_INF = 1e18 + 5;
int n, m, k;
bool odw[MAX];
int grupa[MAX];
int grupa_syna[MAX];
int odleglosc[MAX];
map<int, int> mapa, mapa2;
vector<vector<int> > tree;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  tree.resize(n + 1);
  memset(grupa_syna, -1, sizeof(grupa_syna));
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    cin >> a >> b;
    tree[a].push_back(b);
    tree[b].push_back(a);
  }
  vector<int> tab(n);
  for (auto &u : tab) {
    cin >> u;
  }
  if (tab[0] != 1) {
    cout << "No";
    return 0;
  }
  queue<int> Q;
  Q.push(1);
  int licznik = 0;
  int drugi = 1;
  odw[1] = 1;
  grupa[1] = -1;
  while (int((Q).size())) {
    int r = Q.size();
    for (int i = 0; i < r; i++) {
      int u = Q.front();
      Q.pop();
      odleglosc[u] = licznik;
      for (auto v : tree[u]) {
        if (!odw[v]) {
          odw[v] = 1;
          grupa[v] = drugi;
          Q.push(v);
          grupa_syna[u] = drugi;
        }
      }
      drugi++;
    }
    licznik++;
  }
  for (int i = 1; i < n; i++) {
    if (odleglosc[tab[i]] < odleglosc[tab[i - 1]]) {
      cout << "No";
      return 0;
    }
  }
  queue<int> priorytet;
  for (auto u : tab) {
    if (grupa_syna[u] == -1) {
      continue;
    }
    priorytet.push(grupa_syna[u]);
  }
  for (int i = 1; i < n; i++) {
    if (grupa[tab[i]] != grupa[tab[i - 1]] &&
        grupa[tab[i]] != priorytet.front()) {
      cout << "No";
      return 0;
    } else if (grupa[tab[i]] != grupa[tab[i - 1]]) {
      priorytet.pop();
    }
  }
  for (int i = 1; i < n; i++) {
    if (grupa[tab[i]] != grupa[tab[i - 1]]) {
      if (mapa[grupa[tab[i]]]) {
        cout << "No";
        return 0;
      } else {
        mapa[grupa[tab[i]]] = 1;
      }
    }
  }
  cout << "Yes";
}
