module M = Map.Make(struct type t = int * int let compare = compare end)
let inc k m = try M.add k (1 + M.find k m) m with Not_found -> M.add k 1 m

let init n = Array.make n (-1)
let rec find x p =
  if p.(x) < 0 then x
  else let x' = find p.(x) p in p.(x) <- x'; x'
let unite x y p =
  let x', y' = find x p, find y p in
  if x' = y' then () else begin
    if p.(x') < p.(y') then begin
      p.(x') <- p.(x') + p.(y'); p.(y') <- x';
    end else begin
      p.(y') <- p.(x') + p.(y'); p.(x') <- y';
    end
  end
let size x p = - p.(find x p)

let () =
  Scanf.scanf "%d %d %d" @@ fun n k l ->
  let e0 = Array.init k (fun _ -> Scanf.scanf " %d %d" (fun x y -> x-1, y-1)) in
  let e1 = Array.init l (fun _ -> Scanf.scanf " %d %d" (fun x y -> x-1, y-1)) in
  let uf0, uf1, uf2  = init n, init n, init n in
  e0 |> Array.iter (fun (u, v) -> unite u v uf0);
  e1 |> Array.iter (fun (u, v) -> unite u v uf1);
  let g = Array.init n (fun i -> (find i uf0, find i uf1)) in
  let m = Array.fold_left (fun m (i, j) -> inc (i, j) m) M.empty g in
  g |> Array.iter (fun p -> M.find p m |> Printf.printf "%d ");
  print_newline ()
