#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> P;
typedef long long ll;
const int N=2e5+20;
const int M=30;
struct Union_find{
	Union_find(int n){par.resize(n);for(int i=0;i<n;i++) par[i]=i;}
	int find(int x){return (par[x]==x)?x:par[x]=find(par[x]);}
	void unite(int a,int b){a=find(a),b=find(b);par[a]=b;}
	bool same(int a,int b){return find(a)==find(b);}
	vector<int> par;
};
int main()
{
	int n,k,l;
	cin>>n>>k>>l;
	Union_find uf1(n);
	for(int i=0;i<k;i++)
	{
		int u,v;
		cin>>u>>v;
		uf1.unite(u-1,v-1);//vector par[i]从0开始标号 
	}
	
	Union_find uf2(n);
	for(int i=0;i<l;i++)
	{
		int p,q;
		cin>>p>>q;
		uf2.unite(p-1,q-1);
	}
 
 
	map<P,int> mp;
	for(int i=0;i<n;i++)
	{
		mp[make_pair(uf1.find(i),uf2.find(i))]++;
	}
	for(int i=0;i<n;i++)
	{
		cout<<mp[make_pair(uf1.find(i),uf2.find(i))]; 
		if(i==n-1)
		cout<<endl;
		else
		cout<<' ';
	}
	return 0;
} 