using System;
using System.Collections.Generic;

public class CSharp{
    public static void Main(){
        Kyopuro chokudai = new Kyopuro();
	    chokudai.AtCoder();
	}
}

public class Kyopuro{
    
    int n, k;
    int[] a, b, v, p, ans;
    int[] pmin, pmax;
    bool yn;
    bool[] vtd, odd;
    List<int>[] list;
    
    public void AtCoder(){
        string[] s = Console.ReadLine().Split(' ');
        n = int.Parse(s[0]);
        a = new int[n-1];
        b = new int[n-1];
        for(int i=0; i<n-1; i++){
            s = Console.ReadLine().Split(' ');
            a[i] = int.Parse(s[0]) - 1;
            b[i] = int.Parse(s[1]) - 1;
        }
        k = int.Parse(Console.ReadLine());
        v = new int[k];
        p = new int[k];
        for(int i=0; i<k; i++){
            s = Console.ReadLine().Split(' ');
            v[i] = int.Parse(s[0]) - 1;
            p[i] = int.Parse(s[1]);
        }
        list = new List<int>[n];
        for(int i=0; i<n; i++) list[i] = new List<int>();
        for(int i=0; i<n-1; i++){
            list[a[i]].Add(b[i]);
            list[b[i]].Add(a[i]);
        }
        ans = new int[n];
        for(int i=0; i<n; i++) ans[i] = -999999;
        for(int i=0; i<k; i++){
            ans[v[i]] = p[i];
        }
        yn = true;
        vtd = new bool[n];
        odd = new bool[n];
        DfsOdd(v[0], p[0]);
        for(int i=0; i<n; i++){
            if(ans[i] != -999999){
                if(odd[i] && ans[i]%2 == 0) yn = false;
                if(!odd[i] && ans[i]%2 == 1) yn = false;
            }
        }
        pmin = new int[n];
        pmax = new int[n];
        for(int i=0; i<n; i++){
            pmin[i] = -999999;
            pmax[i] = 99999999;
            if(ans[i] != -999999){
                pmin[i] = ans[i];
                pmax[i] = ans[i];
            }
        }
        vtd = new bool[n];
        int start = 0;
        while(list[start].Count != 1) start++;
        if(yn){
            Dfs(start);
            vtd = new bool[n];
            Dfs2(start, -1);
        }
        if(yn){
            Console.WriteLine("Yes");
            for(int i=0; i<n; i++){
                Console.WriteLine(ans[i]);
            }
        } else Console.WriteLine("No");
    }
    
    public void DfsOdd(int x, int y){
        if(y%2 == 1) odd[x] = true;
        else odd[x] = false;
        vtd[x] = true;
        foreach(int i in list[x]){
            if(!vtd[i]) DfsOdd(i, y+1);
        }
    }
    
    public void Dfs(int u){
        vtd[u] = true;
        foreach(int i in list[u]){
            if(!vtd[i]){
                Dfs(i);
                if(pmin[i] != -999999){
                    pmin[u] = Math.Max(pmin[u], pmin[i]-1);
                    pmax[u] = Math.Min(pmax[u], pmax[i]+1);
                }
            }
        }
        if(ans[u] != -999999){
            pmin[u] = ans[u];
            pmax[u] = ans[u];
        }
    }
    
    public void Dfs2(int u, int par){
        vtd[u] = true;
        if(ans[u] == -999999){
            int dif = pmax[u] - pmin[u];
            if(dif < 0) yn = false;
            if(par == -1){
                ans[u] = pmin[u];
            } else {
                if(ans[par] - 1 >= pmin[u]) ans[u] = ans[par] - 1;
                if(ans[par] + 1 <= pmax[u]) ans[u] = ans[par] + 1;
                if(ans[u] == -999999) yn = false;
            }
        } else {
            if(par != -1){
                int dif = ans[u] - ans[par];
                if(dif != 1 && dif != -1) yn = false;
            }
        }
        foreach(int i in list[u]) if(!vtd[i]) Dfs2(i, u);
    }
    
    public static void DebugWL(object x){ System.Diagnostics.Debug.WriteLine(x); }
}

Measured memory_bytes: 40444