#include <iostream>
using namespace std;
#define For(i,a,b) for(int i =(a);i<=(b);++i)
#define Rof(i,a,b) for(int i = (a);i>=(b);--i)
const int N = 1e5+1;
int id(int x,int y){
return (1<<(x-1)) - 1 + y;
}
int ls(int k){
return k*2;
}
int rs(int k){
return k*2+1;
}
bool del[N];
char ans [4000][4000];
int h(int level){
return 3*(1<<(level-2));
}
int w(int level){
return 6 * (1<<(level-2));
}
char tree[3][6]={" o ",
" / \\ ",
"o o"};
/*
o
/ \
o o
*/
void draw(int m,int i,int x,int y){
if(del[i]) return;
if(m == 2){
int ht = h(2),wd = w(2);
for(int j = 0;j<ht;++j){
for(int k = 0;k<wd;++k){
ans[x+j][y+k] = tree[j][k];
}
}
return;
}
else{
int ht = h(m),wd = w(m);
draw(m-1,ls(i),x+ht/2,y);
draw(m-1,rs(i),x+ht/2,y+wd/2);
ans[x][y+wd/2-1] = 'o';
for(int j = 1,k = 1;j<ht/2;++j,++k){
if(!del[ls(i)]) ans[x+j][y+wd/2-1-k] = '/';
if(!del[rs(i)]) ans[x+j][y+wd/2-1+k] = '\\';
}
}
}
int main(){
// ios::sync_with_stdio(0);
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
// tree[0] =" o ";
// cout<<tree[0];
int n,d,a,c;
// cout<<tree[0]<<'\n'<<tree[1]<<'\n'<<tree[2];
cin>>n>>d;
while(d--){
cin>>a>>c;
del[id(a,c)] = 1;
}
draw(n,1,1,1);
int ht = h(n),wd = w(n);
for(int i = 1;i<=ht;++i){
for(int j = 1;j< wd;++j){
if(ans[i][j] =='\0') ans[i][j] = ' ';
}
if( i<ht) ans[i][wd] = '\n';
cout<<ans[i]+1;
}
return 0;
}