#include<bits/stdc++.h>
typedef long long ll;
#define No() puts("NO"),exit(0)
using namespace std;
int n,m,K;
int a[300010],fa[300010],dn,id[300010],ed[300010],x=0,bg=0,sm=0,R;
vector<int>E[300010];
ll ans=0;
bool cmp(int x,int y){
	return a[x]<a[y];
}
void dfs(int u,int dep){
	id[u]=++x;
	if(a[u]>=dn){
		bg++;
		if(a[u]!=dn+bg-1) No();
	}
	sort(E[u].begin(),E[u].end(),cmp);
	for(auto v:E[u]) dfs(v,dep+1);
	sm++;
	if(a[u]<dn){
		ans+=dep;
		if(a[u]!=sm) No();
	}
	if(sm==dn) R=u;
	ed[u]=x;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=1,u,v;i<n;i++) scanf("%d%d",&u,&v),fa[v]=u,E[u].push_back(v);
	dn=max(1,a[1]-1);
	int st;
	for(int i=1;i<=n;i++) if(a[i]==dn){
		st=i;
		while(i!=1) swap(a[i],a[fa[i]]),ans++,i=fa[i];
		break;
	}
	dfs(1,0);
	if(id[st]>id[R]||ed[R]>ed[st]) No();
	puts("YES");
	printf("%lld\n",ans);
	for(int i=1;i<=n;i++) printf("%d ",id[i]);puts("");
}