#include<bits/stdc++.h>
using namespace std;
long long n,k,num,x,y,line=2000;
long long l,r,f[20]={0,1,2,5,11,23,47,95,191,383,767};
long long s[20]={0,2,6,12,24,48,96,192,384,768,1536};
char paint[2001][5000];
struct TREE
{
long long x,y;
}tree[3100];
void draw(long long i)
{
x=line,y=l;
l=y+f[i]+1;
for(long long j=1;j<=num/2;++j)
{
for(long long k=1;k<=f[i];++k)
paint[--x][++y]='/';
paint[--x][++y]='o';
for(long long k=1;k<=f[i];++k)
paint[++x][++y]='\\';
++x;
y++;
y+=s[i];
}
y-=s[i];
r=y-f[i]-1;
//cout<<y<<endl;
line=x-f[i]-1;
num/=2;
}
void remove_down_all(long long up,long long r_l,long long r_r)
{
for(long long i=up;i<=2000;++i)
for(long long j=r_l;j<=r_r;++j)
paint[i][j]=' ';
}
void remove_up_edge(long long x,long long y)
{
long long ex=x-1,ey=y-1;
if(paint[ex][ey]!=' ')
while(paint[ex][ey]!='o')
paint[ex--][ey--]=' ';
ex=x-1,ey=y+1;
if(paint[ex][ey]!=' ')
while(paint[ex][ey]!='o')
paint[ex--][ey++]=' ';
}
int main()
{
cin>>n>>k;
memset(paint,' ',sizeof(paint));
num=1<<(n-1);
long long num2=num;
l=1;r=(num/2)*6-1;//初始化左右边界
for(long long i=1,j=1;i<=num/2;++i,j+=6)
{
paint[2000][j]='o';
paint[2000][j+4]='o';
}
for(long long i=1;i<n;++i)
draw(i);
long long len=0;
long long to=(num2/2)*6-1;
for(long long i=line;i<=2000;++i)
for(long long j=1;j<=to;++j)
{
if(paint[i][j]=='o')
{
tree[++len].x=i;
tree[len].y=j;
}
}
long long t,y1,y2;
for(long long i=1;i<=k;++i)
{
scanf("%d%d",&x,&y);
t=1<<(x-1);
t=t+y-1;
x=tree[t].x;
y=tree[t].y;
y1=y-(2000-x);
y2=y+(2000-x);
remove_down_all(x,y1,y2);
remove_up_edge(x,y);
}
for(long long i=line;i<=2000;++i)
{
for(long long j=1;j<=to;++j)
cout<<paint[i][j];
cout<<endl;
}
}