using System;
using System.Collections.Generic;
using System.Linq;
using static AtCoder.Io;

namespace AtCoder
{
    class Program
    {
        static void Main()
        {
            var nkl = ReadIntArray();
            var n = nkl[0];
            var k = nkl[1];
            var l = nkl[2];
            var road = new DisjointSet(n);
            var train = new DisjointSet(n);
            for (var i = 0; i < k; i++)
            {
                var pq = ReadIntArray();
                var p = pq[0] - 1;
                var q = pq[1] - 1;
                road.Unite(p, q);
            }

            for (var i = 0; i < l; i++)
            {
                var rs = ReadIntArray();
                var r = rs[0] - 1;
                var s = rs[1] - 1;
                train.Unite(r, s);
            }

            var count = Enumerable.Range(0, n)
                .Select(v => Tuple.Create(road.Root(v), train.Root(v)))
                .GroupBy(v => v)
                .ToDictionary(v => v.Key, v => v.Count());
            Console.WriteLine(string.Join(" ", Enumerable.Range(0, n).Select(v => count[Tuple.Create(road.Root(v), train.Root(v))])));
            //var keys = new int[n];
            //for (var i = 0; i < n; i++)
            //{
            //    keys[i] = road.Root(i) * n + train.Root(i);
            //}

            //var count = new Dictionary<int, int>();
            //for (var i = 0; i < n; i++)
            //{
            //    if (!count.ContainsKey(keys[i]))
            //    {
            //        count.Add(keys[i], 0);
            //    }
            //    count[keys[i]]++;
            //}
            //Console.WriteLine(string.Join(" ", keys.Select(v => count[v])));
        }
    }

    public class DisjointSet
    {
        private readonly int[] Parent;
        private readonly int[] Rank;

        public DisjointSet(int length)
        {
            Parent = Enumerable.Range(0, length).ToArray();
            Rank = Enumerable.Repeat(0, length).ToArray();
        }

        public int Root(int index)
        {
            return Parent[index] == index ? index : Parent[index] = Root(Parent[index]);
        }
        public bool IsSame(int lhs, int rhs)
        {
            return Root(lhs) == Root(rhs);
        }

        public void Unite(int lhs, int rhs)
        {
            var x = Root(lhs);
            var y = Root(rhs);
            if (x != y)
            {
                if (Rank[x] < Rank[y])
                {
                    Parent[x] = y;
                }
                else
                {
                    Parent[y] = x;
                    if (Rank[x] == Rank[y])
                    {
                        Rank[x]++;
                    }
                }
            }
        }
    }

    public static class Io
    {
        public static string ReadString() => Console.ReadLine();
        public static string[] ReadStringArray() => ReadString().Split(' ');
        public static int ReadInt() => int.Parse(ReadString());
        public static long ReadLong() => long.Parse(ReadString());
        public static int[] ReadIntArray() => ReadStringArray().ParseInt().ToArray();
        public static long[] ReadLongArray() => ReadStringArray().ParseLong().ToArray();
        public static IEnumerable<int> ParseInt(this IEnumerable<string> source) => source.Select(int.Parse);
        public static IEnumerable<long> ParseLong(this IEnumerable<string> source) => source.Select(long.Parse);
    }
}


Measured memory_bytes: 58764