using System;
using System.Collections.Generic;
using System.Collections;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.IO;
using System.Reflection;
using static System.Math;
using System.Numerics;
static class Program{
	const int mod=(int)1e9+7;
	static List<int>[] li;
	static bool[] b;
	static bool bo;
	static int[] h,ans;
	static int[] tu1,tu2;
	static void Main(){
		Sc sc=new Sc();
		int n=sc.I,m=n-1;
		li=new List<int>[n+1];
		b=new bool[n+1];
		bo=true;
		h=new int[n+1];
		tu1=new int[n+1];
		tu2=new int[n+1];
		for(int i=1;i<=n;i++){
			h[i]=-1;
			li[i]=new List<int>();
		}
		h[0]=-1;
		for(int i=0;i<m;i++){
			int[] e=sc.Ia;
			li[e[0]].Add(e[1]);
			li[e[1]].Add(e[0]);
		}
		int q=sc.I,p=0;
		for(int i = 0;i<q;i++) {
			int[] e=sc.Ia;
			h[e[0]]=e[1];
			if(e[1]>h[p]){p=e[0];}
		}
		Fu(p,h[p]%2);
		if(!bo){
			Console.WriteLine("No");
			return;
		}
		ans=new int[n];
		b=new bool[n+1];
		Fu2(p,0);
		Console.WriteLine("Yes");
		Console.WriteLine(String.Join("\n",ans));
	}
	static void Fu2(int a,int g){
		b[a]=true;
		if(h[a]!=-1){
			ans[a-1]=h[a];
			g=h[a];
		}
		else{g=ans[a-1]=tu1[a]>=g+1&&tu2[a]<=g+1?g+1:g-1;}
		for(int i=0;i<li[a].Count;i++){
			if(!b[li[a][i]]){Fu2(li[a][i],g);}
		}
	}
	static void Fu(int a,int g){
		b[a]=true;
		tu1[a]=h[a]==-1?2000000:h[a];
		tu2[a]=h[a]==-1?-1000000:h[a];
		if(h[a]!=-1&&h[a]%2!=g){bo=false;}
		for(int i=0;bo&&i<li[a].Count;i++){
			if(!b[li[a][i]]){
				Fu(li[a][i],g^1);
				tu1[a]=Min(tu1[a],tu1[li[a][i]]+1);
				tu2[a]=Max(tu2[a],tu2[li[a][i]]-1);
			}
		}
		if(tu1[a]<tu2[a]){bo=false;}
	}
}

public class Sc{
	public int I{get{return int.Parse(Console.ReadLine());}}
	public long L{get{return long.Parse(Console.ReadLine());}}
	public double D{get{return double.Parse(Console.ReadLine());}}
	public string S{get{return Console.ReadLine();}}
	public int[] Ia{get{return Array.ConvertAll(Console.ReadLine().Split(),int.Parse);}}
	public long[] La{get{return Array.ConvertAll(Console.ReadLine().Split(),long.Parse);}}
	public double[] Da{get{return Array.ConvertAll(Console.ReadLine().Split(),double.Parse);}}
	public string[] Sa{get{return Console.ReadLine().Split();}}
	public object[] Oa{get{return Console.ReadLine().Split();}}
	public int[] Ia2{get{return Array.ConvertAll(("0 "+Console.ReadLine()+" 0").Split(),int.Parse);}}
	public int[] Ia3(int a){return Array.ConvertAll((a.ToString()+" "+Console.ReadLine()).Split(),int.Parse);}
	public int[] Ia3(bool a,int b,bool c,int d){return Array.ConvertAll(((a?b.ToString()+" ":"")+Console.ReadLine()+(c?" "+d.ToString():"")).Split(),int.Parse);}
	public long[] La2{get{return Array.ConvertAll(("0 "+Console.ReadLine()+" 0").Split(),long.Parse);}}
	public long[] La3(int a){return Array.ConvertAll((a.ToString()+" "+Console.ReadLine()).Split(),long.Parse);}
	public long[] La3(bool a,int b,bool c,int d){return Array.ConvertAll(((a?b.ToString()+" ":"")+Console.ReadLine()+(c?" "+d.ToString():"")).Split(),long.Parse);}
	public T[] Arr<T>(int n,Func<T> f){var a=new T[n];for(int i=0;i<n;i++){a[i]=f();}return a;}
	public T[] Arr<T>(int n,Func<int,T> f){var a=new T[n];for(int i=0;i<n;i++){a[i]=f(i);}return a;}
	public T[] Arr<T>(int n,Func<string[],T> f){var a=new T[n];for(int i=0;i<n;i++){a[i]=f(Console.ReadLine().Split());}return a;}
	public T[] Arr<T>(int n,Func<int,string[],T> f){var a=new T[n];for(int i=0;i<n;i++){a[i]=f(i,Console.ReadLine().Split());}return a;}
}

Measured memory_bytes: 44936