local mmi, mma = math.min, math.max
local n = io.read("*n")
local edge = {}
local len = {}
local parent = {}
local childcnt = {}
local valmin, valmax = {}, {}
for i = 1, n do
  edge[i] = {}
  len[i] = -1
  parent[i] = 0
  childcnt[i] = 0
  valmin[i], valmax[i] = false, false
end
for i = 1, n - 1 do
  local a, b = io.read("*n", "*n")
  edge[a][b], edge[b][a] = true, true
end
local k = io.read("*n")
local startpos, startval = 0, 0
for i = 1, k do
  local pos, val = io.read("*n", "*n")
  valmin[pos], valmax[pos] = val, val
  if i == 1 or val < startval then
    startpos, startval = pos, val
  end
end
local valid = true
len[startpos] = 0
local tasks = {startpos}
for i = 1, n do
  local src = tasks[i]
  for dst, _u in pairs(edge[src]) do
    if len[dst] < 0 then
      childcnt[src] = childcnt[src] + 1
      parent[dst] = src
      len[dst] = len[src] + 1
      if valmax[dst] then
        if (valmax[dst] + valmax[startpos] + len[dst]) % 2 == 1 then
          valid = false break
        end
        if valmax[startpos] + len[dst] < valmax[dst] then
          valid = false break
        end
      else
        valmax[dst] = valmax[startpos] + len[dst]
        valmin[dst] = valmax[startpos] + (len[dst] % 2)
      end
      table.insert(tasks, dst)
    end
  end
  if not valid then break end
end
if not valid then print("No")
else
  tasks = {}
  for i = 1, n do
    if childcnt[i] == 0 then
      table.insert(tasks, i)
    end
  end
  for i = 1, n - 1 do
    local c = tasks[i]
    local p = parent[c]
    local newp_min = mma(valmin[p], valmin[c] - 1)
    local newp_max = mmi(valmax[p], valmax[c] + 1)
    if newp_max < newp_min then
      valid = false
      break
    end
    valmin[p] = newp_min
    valmax[p] = newp_max
    childcnt[p] = childcnt[p] - 1
    if childcnt[p] == 0 then
      table.insert(tasks, p)
    end
  end
  if not valid then print("No")
  else
    local val = {}
    for i = 1, n do val[i] = 0 end
    val[startpos] = valmin[startpos]
    tasks = {startpos}
    for i = 1, n do
      local src = tasks[i]
      for dst, _u in pairs(edge[src]) do
        if len[src] < len[dst] then
          if valmin[dst] <= val[src] - 1 then
            val[dst] = val[src] - 1
          else
            val[dst] = val[src] + 1
          end
          table.insert(tasks, dst)
        end
      end
    end
    print("Yes")
    for i = 1, n do
      print(val[i])
    end
  end
end
