#include<bits/stdc++.h>
#define N 400005
using namespace std;
int n,m,x,y,q[N],b[N];
struct T
{
	int x,y;
}a[N];
bool cmp(T a,T b)
{
	return a.y>b.y;
}
int to[N*2],nxt[N*2],fst[N],l;
void link(int x,int y)
{
	to[++l]=y;nxt[l]=fst[x];fst[x]=l;
	to[++l]=x;nxt[l]=fst[y];fst[y]=l;
}
void biu()
{
	puts("No");
	exit(0);
}
int main()
{
	scanf("%d",&n);
	for (int i=1;i<n;i++)
	{
		scanf("%d%d",&x,&y);
		link(x,y);
	}
	for (int i=1;i<=n;i++)
		b[i]=233333333;
	scanf("%d",&m);
	for (int i=1;i<=m;i++)
	{
		scanf("%d%d",&x,&y);
		a[i]=(T){x,y};
	}
	sort(a+1,a+m+1,cmp);
	int l=0,r=1,f=1;
	q[1]=a[1].x;b[a[1].x]=a[1].y;
	while(l<r)
	{
		l++;
		//cout<<q[l]<<endl;
		while(f<m&&a[f+1].y==b[q[l]])
		{
			f++;
			q[++r]=a[f].x;
			if (b[a[f].x]!=233333333&&b[a[f].x]!=a[f].y) biu();
			b[a[f].x]=a[f].y;
		}
		for (int i=fst[q[l]];i;i=nxt[i])
		if (b[to[i]]==233333333)
		{
			q[++r]=to[i];
			b[to[i]]=b[q[l]]-1;
		}
	}
	for (int i=1;i<=m;i++)
		if (b[a[i].x]!=a[i].y)biu();
	for (int i=1;i<=n;i++)
		for (int j=fst[i];j;j=nxt[j])
			if (abs(b[i]-b[to[j]])!=1) biu();
	puts("Yes");
	for (int i=1;i<=n;i++)
		printf("%d\n",b[i]);
}