#include<bits/stdc++.h>
using namespace std;

const int maxn=1e5+7;

int n,k,l;

vector<int>e[maxn];
vector<int>e2[maxn];
int f[maxn];
int ft[maxn];
int ft2[maxn];

int ans[maxn];

vector<int>in;

int num;

void dfs(int now)
{
	ft[now]=1;
	int i,j,len=e[now].size();
	for(i=0;i<len;++i)
	{
		int v=e[now][i];
		if(!ft[v])
		  dfs(v);
	}
}

void dfs2(int now)
{
	ft2[now]=1;
	if(ft[now])
	{
		num++;
		in.push_back(now);
		f[now]=1;
	}
	int i,j,len=e2[now].size();
	for(i=0;i<len;++i)
	{
		int v=e2[now][i];
		if(!ft2[v])
		  dfs2(v);
	}
}

int main()
{
	int i,j;
	scanf("%d%d%d",&n,&k,&l);
	for(i=0;i<k;++i)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		e[x].push_back(y);
		e[y].push_back(x);
	}
	
	for(i=0;i<l;++i)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		e2[x].push_back(y);
		e2[y].push_back(x);
	}
	
	
	for(i=1;i<=n;++i)
	{
		if(!f[i])
		{
			memset(ft,0,sizeof(ft));
			memset(ft2,0,sizeof(ft2));
			num=0;
			if(!in.empty())
				in.clear();
			dfs(i);
			dfs2(i);
			int len=in.size();
			for(j=0;j<len;++j)
			  ans[in[j]]=num;
		}
	}
	
	
	
	printf("%d",ans[1]);
	for(i=2;i<=n;++i)
	{
		printf(" %d",ans[i]);
	}
	return 0;
}