#include <bits/stdc++.h>
using namespace std;
struct dfss{
string a="";
}a[40000];
map<string,bool>maps;
int n,maxn;
void print(){
for(int i=0;i<=maxn;i++){
cout<<a[i].a<<endl;
}
return ;
}
bool ok=0;
void dfs(int x){
if(ok==1)return ;
if(x>maxn){
if(a[x-1].a==a[0].a){
print();
ok=1;
return ;
}
}
for(int i=0;i<n;i++){
string y=a[x-1].a;
if(y[i]!='X'){
y.replace(i,1,"X");
if(!maps[y]){
maps[y]=1;
a[x].a=y;
dfs(x+1);
maps[y]=0;
a[x].a="";
}
}else{
y.replace(i,1,"O");
if(!maps[y]){
maps[y]=1;
a[x].a=y;
dfs(x+1);
maps[y]=0;
a[x].a="";
}
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
a[0].a+="O";
maxn=pow(2,n);
dfs(1);
}