#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
vector<vector<string>> q;
vector<vector<bool>> mark;
vector<string> path;
int dx[8]={1,-1,0,0,1,1,-1,-1};
int dy[8]={0,0,1,-1,1,-1,-1,1};
void update(int x,int y)
{
mark[x][y]=true;
for(int i=0;i<8;i++)
{
for(int j=0;j<mark.size();j++)
{
int a=x+j*dx[i],b=y+j*dy[i];
if(a>=0&&a<mark.size()&&b>=0&&b<mark.size())
{
mark[a][b]=true;
}
}
}
}
void dfs(int k,int n)
{
if(k==n)
{
q.push_back(path);
return ;
}
for(int i=0;i<n;i++)
{
if(mark[k][i]==false)
{
vector<vector<bool>> tmp=mark;
path[k][i]='Q';
update(k,i);
dfs(k+1,n);
path[k][i]='.';
mark=tmp;
}
}
}
int main()
{
ios::sync_with_stdio(false);
int n;
while(cin>>n)
{
string p;
p.append(n,'.');
path=vector<string>(n,p);
mark=vector<vector<bool>>(n,vector<bool>(n,false));
dfs(0,n);
for(int i=0;i<q.size();i++)
{
for(int j=0;j<q[i].size();j++)
{
cout<<q[i][j]<<endl;
}
cout<<endl;
}
}
return 0;
}