
#include <bits/stdc++.h>

using namespace std;

#define MP make_pair
#define PB push_back
typedef long long LL;
typedef pair<int,int> PII;
const double eps=1e-8;
const double pi=acos(-1.0);
const int K=1e5+7;
const int mod=1e9+7;

vector<int>mp[2*K],cp[2*K];
int n,k,l,vis[2*K],sa[2*K],sb[2*K];
set<int>st[2*K],se[2*K];
void dfs1(int x,int ss)
{
    for(int i=0;i<mp[x].size();i++)
        if(!vis[mp[x][i]])
            st[ss].insert(mp[x][i]),vis[mp[x][i]]=1,sa[mp[x][i]]=ss,dfs1(mp[x][i],ss);
}
void dfs2(int x,int ss)
{
    for(int i=0;i<cp[x].size();i++)
        if(!vis[cp[x][i]])
            se[ss].insert(cp[x][i]),vis[cp[x][i]]=1,sb[cp[x][i]]=ss,dfs2(cp[x][i],ss);
}
int main(void)
{
    cin>>n>>k>>l;
    for(int i=1,x,y;i<=k;i++)
        scanf("%d%d",&x,&y),mp[x].PB(y),mp[y].PB(x);
    for(int i=1,x,y;i<=l;i++)
        scanf("%d%d",&x,&y),cp[x].PB(y),cp[y].PB(x);
    memset(vis,0,sizeof(vis));
    for(int i=1;i<=n;i++)
    if(!vis[i])
            vis[i]=1,sa[i]=i,st[i].insert(i),dfs1(i,i);
    memset(vis,0,sizeof(vis));
    for(int i=1;i<=n;i++)
    if(!vis[i])
            vis[i]=1,sb[i]=i,se[i].insert(i),dfs2(i,i);
    for(int i=1;i<=n;i++)
    {
        int x=sa[i],y=sb[i],ans=0;
        set<int>::iterator pa,pb;
        pa=st[sa[i]].begin();
        pb=se[sb[i]].begin();
        while(pa!=st[x].end() && pb!=se[y].end())
        {
            //printf("%d %d\n",*pa,*pb);
            if(*pa == *pb)
            ans++,pa++,pb++;
            else if(*pa < *pb)
                pa++;
            else
                pb++;

        }
        printf("%d%c",ans,i==n?'\n':' ');
    }
    return 0;
}
