#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> P;
typedef long long ll;

int k;
vector<P> d;
char table[8][8];
vector<int> row;
vector<int> col;

void show_vec(vector<int>);

void solve(){
    
    sort(col.begin(), col.end());
    do{
       
        vector<P> v;
        for (auto &e: d) v.push_back(e);
        
        for (int i = 0 ; i < (int)row.size(); i++)
        {   
            P p;
            p.first = row[i];
            p.second = col[i];
            v.push_back(p);
        }
        bool ok = true;
        for (int i = 0; i < (int)v.size() && ok; i++)
        {
            for (int j = 0; j < (int)v.size(); j++)
            {
                if(i == j) continue;
                int dx = v[i].first - v[j].first;
                int dy = v[i].second - v[j].second;
                if(abs(dx) == abs(dy)){
                    ok = false;
                    break;
                }
            }
            
        }
        if(ok){
            for(auto &e: v){
                //cout << "(" << e.first << ", " << e.second << ")";
                table[e.first][e.second] = 'Q';
            }
        
            break;
        }
    }while(next_permutation(col.begin(), col.end()));
    
    for (int i = 0; i < 8; i++)
    {
        for (int j = 0; j < 8; j++)
        {
            cout << table[i][j];
        }
        cout << endl;
        
    }
    
}


int main(){
    cin >> k;
    for (int i = 0; i < 8; i++)
    {
        row.push_back(i);
        col.push_back(i);
    }

    
    for (int i = 0; i < k; i++)
    {
        P p;
        cin >> p.first >> p.second;
        row.erase(find(row.begin(), row.end(), p.first));
        col.erase(find(col.begin(), col.end(), p.second));
        d.push_back(p);
    }
    for (int i = 0; i < 8; i++)
    {
        for (int j = 0; j < 8; j++)
        {
            table[i][j] = '.';
        }
       
        
    }
  
    solve();

    return 0;

}

void show_vec(vector<int> v){
    cout << "[";
    for (int i = 0; i < (int)v.size(); i++)
    {
        cout << v[i] << ", ";
    }
    cout << "\b\b]" << endl;
}

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <stack>
#define N 8
using namespace std;

stack<char> s[N][N];
char map[N][N];
int kazu;

void post(int a,int b){
	for(int i=0;i<N;i++){
		s[i][b].push(1);
		if(i!=b) s[a][i].push(1);
	}
	for(int i=1;i+a<N&&i+b<N;i++){
		s[a+i][b+i].push(1);
	}
	for(int i=1;a-i>=0&&b-i>=0;i++){
		s[a-i][b-i].push(1);
	}
	for(int i=1;a+i<N&&b-i>=0;i++){
		s[a+i][b-i].push(1);
	}
	for(int i=1;a-i>=0&&b+i<N;i++){
		s[a-i][b+i].push(1);
	}
}

void receive(int a,int b){
	for(int i=0;i<N;i++){
		s[i][b].pop();
		if(i!=b)s[a][i].pop();
	}
	for(int i=1;i+a<N&&i+b<N;i++){
		s[a+i][b+i].pop();
	}
	for(int i=1;a-i>=0&&b-i>=0;i++){
		s[a-i][b-i].pop();
	}
	for(int i=1;a+i<N&&b-i>=0;i++){
		s[a+i][b-i].pop();
	}
	for(int i=1;a-i>=0&&b+i<N;i++){
		s[a-i][b+i].pop();
	}

}

void view(){
	for(int i=0;i<N;i++){
		for(int j=0;j<N;j++){
			printf("%c",map[i][j]);
		}
		printf("\n");
	}
}

void rop(int a,int b){
	map[a][b]='Q';
	post(a,b);
	kazu++;
	if(kazu>=8){
		view();
		exit(0);
	}
	for(int i=a+1;i<N;i++){
		for(int j=0;j<N;j++){
			if(s[i][j].empty()) rop(i,j);
		}
	}
		receive(a,b);
		map[a][b]='.';
		kazu--;
}

int main(void){
	int n;
	int a,b;

	kazu=0;
	for(int i=0;i<N;i++){
		for(int j=0;j<N;j++){
			map[i][j]='.';
		}
	}

	cin>>n;
	while(n--){
		cin>>a>>b;
		map[a][b]='Q';
		post(a,b);
		kazu++;
	}

	if(kazu==8){
		view();
		exit(0);
	}
	for(int i=0;i<N;i++){
		for(int j=0;j<N;j++){
			if(s[i][j].empty()){
				rop(i,j);
			}
		}
	}
	return 0;
}