#include <bits/stdc++.h>
#define _overload3(_1,_2,_3,name,...) name
#define _rep(i,n) repi(i,0,n)
#define repi(i,a,b) for(int i=int(a);i<int(b);++i)
#define rep(...) _overload3(__VA_ARGS__,repi,_rep,)(__VA_ARGS__)
#define rrep(i,a,b) for(int i=int(a);i>int(b);--i)
using namespace std;
using ll = long long;

int p[2][200010];
map<int, int> mp[200010];

void init(int t, int n){
  rep(i,n) p[t][i]=i;
}

int root(int t, int x){
  if(p[t][x]==x) return x;
  else return p[t][x]=root(t,p[t][x]);
}

bool same(int t, int x, int y){
  return root(t,x)==root(t,y);
}

void unite(int t, int x, int y){
  x = root(t,x);
  y = root(t,y);
  if(x==y) return;

  p[t][x] = y;
}

int main()
{
  int N,K,L;
  cin >> N >> K >> L;

  init(0,N);
  init(1,N);

  int p,q;
  rep(i,K){
    cin >> p >> q;
    unite(0,p-1,q-1);
  }
  rep(i,L){
    cin >> p >> q;
    unite(1,p-1,q-1);
  }

  rep(i,N) mp[root(0,i)][root(1,i)]++;
  rep(i,N) cout << mp[root(0,i)][root(1,i)] << ((i==N-1)?"\n":" ");
}

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

bool check(vector<string> board)
{
	for (int i=0;i<8;i++)
	{
		if (count(board[i].begin(),board[i].end(),'Q')!=1) return false;
		int cnt=0,cnt1=0,cnt2=0,cnt3=0,cnt4=0;
		for (int j=0;j<8;j++)
		{
			if (board[i][j]=='Q') cnt++;
		}
		if (cnt!=1) return false;
		for (int j=0;j<i+1;j++)
		{
			if (board[i-j][j]=='Q') cnt1++;
			if (board[i-j][7-j]=='Q') cnt2++;
		}
		if (cnt1>1 || cnt2>1) return false;
		for (int j=0;j<8-i;j++)
		{
			if (board[i+j][j]=='Q') cnt3++;
			if (board[i+j][7-j]=='Q') cnt4++;
		}
		if (cnt3>1 || cnt4>1) return false;
	}
	return true;
}

int main()
{
	int K;cin >> K;
	vector<pair<int,int>> state(K);
	int x,y;
	for (int i=0;i<K;i++)
	{
		cin >> x >>y;
		state[i]=make_pair(x,y);
	}
	vector<int> num={0,1,2,3,4,5,6,7};
	do
	{
		bool can=true;
		for (int i=0;i<K;i++)
		{
			x=state[i].first;
			y=state[i].second;
			if (num[x]!=y) can=false;;
		}
		if (!can) continue;
		vector<string> board(8,"........");
		for (int i=0;i<8;i++) board[i][num[i]]='Q';
		if (check(board))
		{
			for (int i=0;i<8;i++)
			{
				cout << board[i] << endl;
			}
			break;
		} 
	} while (next_permutation(num.begin(),num.end()));
	
	return 0;
}

