local n, k, l = io.read("*n", "*n", "*n")

local function uf_initialize(n)
  local parent = {}
  for i = 1, n do parent[i] = i end
  return parent
end

local function uf_findroot(idx, parent)
  local idx_update = idx
  while parent[idx] ~= idx do
    idx = parent[idx]
  end
  while parent[idx_update] ~= idx do
    parent[idx_update], idx_update = idx, parent[idx_update]
  end
  return idx
end

local p1, p2 = uf_initialize(n), uf_initialize(n)

for i = 1, k do
  local a, b = io.read("*n", "*n")
  local ra, rb = uf_findroot(a, p1), uf_findroot(b, p1)
  p1[b], p1[rb] = ra, ra
end

for i = 1, l do
  local a, b = io.read("*n", "*n")
  local ra, rb = uf_findroot(a, p2), uf_findroot(b, p2)
  p2[b], p2[rb] = ra, ra
end

local function getidx(r1, r2)
  return r1 - 1 + r2 * n
end
local groups = {}
for i = 1, n do
  local idx = getidx(uf_findroot(i, p1), uf_findroot(i, p2))
  if not groups[idx] then
    groups[idx] = 1
  else
    groups[idx] = groups[idx] + 1
  end
end
for i = 1, n do
  local idx = getidx(uf_findroot(i, p1), uf_findroot(i, p2))
  io.write(groups[idx])
  io.write(i == n and "\n" or " ")
end
