using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace atcoder
{
    class Program
    {
        static int N;
        static int K;
        static int L;
        static Dictionary<int, List<int>> dictRoad;
        static Dictionary<int, List<int>> dictRail;
        static Dictionary<long, List<int>> dictColorAll;
        static int[] cityColorRoad;
        static int[] cityColorRail;
        static long[] cityColorAll;

        static int[] cityRet;

        public static void Main(string[] args)
        {
            string[] s = Console.ReadLine().Split(' ');
            N = int.Parse(s[0]); K = int.Parse(s[1]); L = int.Parse(s[2]);

            cityColorRoad = new int[N];
            cityColorRail = new int[N];
            cityRet = new int[N];
            cityColorAll = new long[N];

            dictRoad = new Dictionary<int, List<int>>();
            dictRail = new Dictionary<int, List<int>>();

            for (int i = 0; i < N; i++)
            {
                dictRoad.Add(i, new List<int>());
                dictRail.Add(i, new List<int>());
            }

            for (int i = 0; i < K; i++)
            {
                string[] line = Console.ReadLine().Split(' ');
                int c1 = int.Parse(line[0]) - 1;
                int c2 = int.Parse(line[1]) - 1;
                dictRoad[c1].Add(c2);
                dictRoad[c2].Add(c1);
            }

            for (int i = 0; i < L; i++)
            {
                string[] line = Console.ReadLine().Split(' ');
                int c1 = int.Parse(line[0]) - 1;
                int c2 = int.Parse(line[1]) - 1;
                dictRail[c1].Add(c2);
                dictRail[c2].Add(c1);
            }

            // Create Cluster
            int colorRoad = 0;
            for (int i = 0; i < N; i++)
            {
                if (cityColorRoad[i] == 0)
                {
                    colorRoad++;
                    cityColorRoad[i] = colorRoad;
                    Paint(i, colorRoad, dictRoad, cityColorRoad);
                }
            }

            int colorRail = 0;
            for (int i = 0; i < N; i++)
            {
                if (cityColorRail[i] == 0)
                {
                    colorRail++;
                    cityColorRail[i] = colorRail;
                    Paint(i, colorRail, dictRail, cityColorRail);
                }
            }

            for (int i = 0; i < N; i++)
            {
                cityColorAll[i] = (long)(cityColorRoad[i]) * 1000000 + (long)(cityColorRail[i]);
            }

            dictColorAll = new Dictionary<long, List<int>>();
            for (int i = 0; i < N; i++)
            {
                long c = cityColorAll[i];

                if (!dictColorAll.ContainsKey(c))
                {
                    dictColorAll.Add(c, new List<int>());
                }
                dictColorAll[c].Add(i);
            }

            // Create Answer
            var keys = dictColorAll.Keys.ToList();
            for (int i = 0; i < keys.Count; i++)
            {
                var key = keys[i];
                var list = dictColorAll[key];
                for (int j = 0; j < list.Count; j++)
                {
                    cityRet[list[j]] = list.Count;
                }
            }

            Console.WriteLine(string.Join(" ", cityRet));

            Console.Read();
        }

        static public void Paint(int i, int color, Dictionary<int, List<int>> dict, int[] cityColors)
        {
            List<int> list = dict[i];
            for (int j = 0; j < list.Count; j++)
            {
                int city = list[j];
                if (cityColors[city] == 0)
                {
                    cityColors[city] = color;
                    Paint(city, color, dict, cityColors);
                }
            }
        }

    }

}


Measured memory_bytes: 81832