#include <bits/stdc++.h>
using namespace std;
const int N=114514,S=2;
struct sam{
int lst,tot,lnk[N]={-1},len[N],ch[N][S];
void clr(){
for(int i=0;i<=tot;i++) fill_n(ch[i],S,0);
lst=tot=0;
}
void ins(int c){
int p=lst,u=++tot;
len[lst=u]=len[p]+1;
while(~p&&!ch[p][c]) ch[p][c]=u,p=lnk[p];
if(p==-1) {lnk[u]=0;return;}
int q=ch[p][c];
if(len[p]+1==len[q]) {lnk[u]=q;return;}
int nq=++tot;copy_n(ch[q],S,ch[nq]);
lnk[nq]=lnk[q];len[nq]=len[p]+1;lnk[q]=lnk[u]=nq;
while(~p&&ch[p][c]==q) ch[p][c]=nq,p=lnk[p];
}
int val(){
int res=0;
for(int i=1;i<=tot;i++) res+=len[i]-len[lnk[i]];
return res;
}
}T;
int calc(string s){
T.clr();
for(auto x:s) T.ins(x=='X');
return T.val();
}
int main(){
mt19937 rnd(time(0));
int n;
cin>>n;
vector<string> s;
map<int,array<int,2>> mp;
while(1){
s.clear();mp.clear();
for(int i=0;i<n;i++){
int len=n*20+rnd()%(n*10+1);
string t;
while(len--) t+=rnd()%10?'X':'O';
s.push_back(t);
}
for(int i=0;i<n;i++) for(int j=0;j<n;j++) mp[calc(s[i]+s[j])]={i,j};
if((int)mp.size()==n*n) break;
}
for(auto x:s) cout<<x<<endl;
cin>>n;
for(int x;n--;) cin>>x,cout<<mp[x][0]+1<<" "<<mp[x][1]+1<<endl;
return 0;
}