/**
* created by : Mostafa Wael (Phoenix)
* problem name : Valid BFS
*/
#include <bits/stdc++.h>
using namespace std;
void make_edge(int &u, int &v, vector<vector<int>>&tree)
{
tree[u].push_back(v);
tree[v].push_back(u);
}
bool check_path_isCorrect(int source, int &n, vector<vector<int>> &tree, vector<bool> &isVisited, queue<int> &path)
{
if(source!=path.front())
return false;
path.pop();
queue<int> q;
q.push(source);
isVisited[source]=true;
while (!q.empty()){
int u=q.front(); q.pop();
int sz=tree[u].size()+(u==source); // first node has no parent
while(--sz){
isVisited[path.front()]=true;
q.push(path.front());
path.pop();
}
for(auto v:tree[u])
if(!isVisited[v])
return false;
}
return true;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
/**
* we can use path to mark node and then check for neighbors node if visited or no
*/
int n;
cin >> n;
vector<vector<int>> tree(n);
for (int i = 1; i < n; i++)
{
int u, v;
cin >> u >> v;
make_edge(--u, --v, tree);
}
queue<int> path;
for(int i=0,u;i<n;i++){
cin>>u;
path.push(--u);
}
vector<bool> isVisited(n);
cout << (check_path_isCorrect(0, n, tree, isVisited, path) ? "Yes" : "No");
return 0;
}
LyoqCiAqIGNyZWF0ZWQgYnkgOiBNb3N0YWZhIFdhZWwgKFBob2VuaXgpCiAqIHByb2JsZW0gbmFtZSA6IFZhbGlkIEJGUyAKICovCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBtYWtlX2VkZ2UoaW50ICZ1LCBpbnQgJnYsIHZlY3Rvcjx2ZWN0b3I8aW50Pj4mdHJlZSkKewogICAgdHJlZVt1XS5wdXNoX2JhY2sodik7CiAgICB0cmVlW3ZdLnB1c2hfYmFjayh1KTsKfQoKYm9vbCBjaGVja19wYXRoX2lzQ29ycmVjdChpbnQgc291cmNlLCBpbnQgJm4sIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gJnRyZWUsIHZlY3Rvcjxib29sPiAmaXNWaXNpdGVkLCBxdWV1ZTxpbnQ+ICZwYXRoKQp7CiAgICBpZihzb3VyY2UhPXBhdGguZnJvbnQoKSkgCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgcGF0aC5wb3AoKTsKICAgIHF1ZXVlPGludD4gcTsKICAgIHEucHVzaChzb3VyY2UpOwogICAgaXNWaXNpdGVkW3NvdXJjZV09dHJ1ZTsKICAgIHdoaWxlICghcS5lbXB0eSgpKXsKICAgICAgICBpbnQgdT1xLmZyb250KCk7IHEucG9wKCk7CiAgICAgICAgaW50IHN6PXRyZWVbdV0uc2l6ZSgpKyh1PT1zb3VyY2UpOyAvLyBmaXJzdCBub2RlIGhhcyBubyBwYXJlbnQgCiAgICAgICAgd2hpbGUoLS1zeil7CiAgICAgICAgICAgIGlzVmlzaXRlZFtwYXRoLmZyb250KCldPXRydWU7CiAgICAgICAgICAgIHEucHVzaChwYXRoLmZyb250KCkpOwogICAgICAgICAgICBwYXRoLnBvcCgpOwogICAgICAgIH0KICAgICAgICBmb3IoYXV0byB2OnRyZWVbdV0pCiAgICAgICAgICAgIGlmKCFpc1Zpc2l0ZWRbdl0pCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQoKaW50IG1haW4oKQp7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0LnRpZSgwKTsKICAgIC8qKgogICAgICogd2UgY2FuIHVzZSBwYXRoIHRvIG1hcmsgbm9kZSBhbmQgdGhlbiBjaGVjayBmb3IgbmVpZ2hib3JzIG5vZGUgaWYgdmlzaXRlZCBvciBubyAKICAgICAqLwogICAgaW50IG47CiAgICBjaW4gPj4gbjsKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gdHJlZShuKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKQogICAgewogICAgICAgIGludCB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgbWFrZV9lZGdlKC0tdSwgLS12LCB0cmVlKTsKICAgIH0KICAgIHF1ZXVlPGludD4gcGF0aDsKICAgIGZvcihpbnQgaT0wLHU7aTxuO2krKyl7CiAgICAgICAgY2luPj51OwogICAgICAgIHBhdGgucHVzaCgtLXUpOwogICAgfQogICAgdmVjdG9yPGJvb2w+IGlzVmlzaXRlZChuKTsKICAgIGNvdXQgPDwgKGNoZWNrX3BhdGhfaXNDb3JyZWN0KDAsIG4sIHRyZWUsIGlzVmlzaXRlZCwgcGF0aCkgPyAiWWVzIiA6ICJObyIpOwogICAgcmV0dXJuIDA7Cn0K