#include <iostream>
#include <vector>
#include <map>
using namespace std;

vector<int> g[2][200010];
int a[2][200010], visited[2][200010];

void dfs(int i, int v, int k)
{
    a[i][v]=k;
    visited[i][v]=1;
    for(int u: g[i][v]) if (!visited[i][u]) dfs(i, u, k);
}

int main()
{
    int N, K, L; cin>>N>>K>>L;
    while (K--) {
        int p, q; cin>>p>>q;
        --p, --q;
        g[0][p].push_back(q);
        g[0][q].push_back(p);
    }
    while (L--) {
        int p, q; cin>>p>>q;
        --p, --q;
        g[1][p].push_back(q);
        g[1][q].push_back(p);
    }
    int k=0;
    for(int i=0; i<N; ++i) {
        if (!a[0][i]) dfs(0, i, ++k);
        if (!a[1][i]) dfs(1, i, ++k);
    }
    map<pair<int, int>, int> x;
    for(int i=0; i<N; ++i) x[make_pair(a[0][i], a[1][i])]++;

    for(int i=0; i<N; ++i) cout<<x[make_pair(a[0][i], a[1][i])]<<' ';
    cout<<endl;
}
