#include<bits/stdc++.h>
#define N 100009
#define nan 1000000000
using namespace std;

int n,m,tot,fst[N],pnt[N<<1],nxt[N<<1],fa[N],ans[N],lf[N],rg[N];
void gg(){
	puts("No"); exit(0);
}
void add(int x,int y){
	pnt[++tot]=y; nxt[tot]=fst[x]; fst[x]=tot;
}
void dfs(int x){
	int i,y;
	for (i=fst[x]; i; i=nxt[i]){
		y=pnt[i];
		if (y!=fa[x]){
			fa[y]=x; dfs(y);
			if (lf[y]!=nan){
				if (lf[x]==nan){
					lf[x]=lf[y]-1; rg[x]=rg[y]+1;
				} else if ((lf[x]^lf[y])&1){
					lf[x]=max(lf[x],lf[y]-1);
					rg[x]=min(rg[x],rg[y]+1);
				} else gg();
			}
		}
	}
	if (lf[x]!=nan && lf[x]>rg[x]) gg();
}
void solve(int x,int t){
	int i,y; ans[x]=t;
	for (i=fst[x]; i; i=nxt[i]){
		y=pnt[i];
		if (y!=fa[x])
			solve(y,(lf[y]==nan || lf[y]<=t+1 && t+1<=rg[y])?t+1:t-1);
	}
}
int main(){
	scanf("%d",&n);
	int i,x,y;
	for (i=1; i<n; i++){
		scanf("%d%d",&x,&y);
		add(x,y); add(y,x);
	}
	for (i=1; i<=n; i++) lf[i]=nan;
	scanf("%d",&m);
	for (i=1; i<=m; i++){
		scanf("%d%d",&x,&y);
		assert(lf[x]==nan);
		lf[x]=rg[x]=y;
	}
	dfs(1);
	puts("Yes");
	solve(1,lf[1]==nan?0:lf[1]);
	for (i=1; i<=n; i++) printf("%d\n",ans[i]);
	return 0;
}
