#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false),cout.tie(0)
#define UP(x,l,r) for (int x=l;x<=r;++x)
#define DOWN(x,l,r) for (int x=l;x>=r;--x)
#define pb push_back
#define low(x) (x&(-x))
using namespace std;
inline void read (int &x) {
char c=getchar(); int w=0; x=0;
for (;!isdigit(c);c=getchar()) w^=!(c^45);
for (;isdigit(c);c=getchar()) x=(x*10)+(c^48);
x=w?-x:x;
}
const int MAXN=3e3;
int n,m,k,K,Mx,x,y;
int add[MAXN];
int L[MAXN],R[MAXN],C[MAXN];
bool P[MAXN][MAXN];
char Map[MAXN][MAXN];
bool pd (int k,int x) {
UP(i,x,Mx) if (Map[k][i]!=' ') return 0;
return 1;
}
void Right (int x,int y) {
Map[x][y]='a';
while (Map[--x][++y]=='/') Map[x][y]=' ';
}
void Left (int x,int y) {
Map[x][y]='a';
while (Map[--x][--y]=='\\') Map[x][y]=' ';
}
void MLeft (int x,int y,int mx,char c) {
while (x<=mx) {
Map[x][y]=c;
++x; --y;
}
}
void MRight (int x,int y,int mx,char c) {
while (x<=mx) {
Map[x][y]=c;
++x; ++y;
}
}
void make (int k,int line) {
if (!line) {K=k; return;}
if (k==1) {
UP(i,1,Mx) Map[k][i]=' ';
Map[k][(Mx+1)/2]='o';
if (!P[1][1]) make(k+1,line-1);
return;
}
// cout<<k<<endl;
UP(i,1,Mx) if (Map[k-1][i]=='o') {
MLeft(k,i-1,k+add[line]-1,'/'),MRight(k,i+1,k+add[line]-1,'\\');
} else if (Map[k-1][i]=='a') {
MLeft(k,i-1,k+add[line]-1,'b'),MRight(k,i+1,k+add[line]-1,'c');
}
k=k+add[line];
int last=0,last1=0,flag=0;
int cnt_l=0,cnt_r=0,cnt=0;
UP(i,1,Mx) {
if (Map[k-1][i]=='o') Map[k][i-1]='/',Map[k][i+1]='\\';
if (Map[k-1][i]=='a') Map[k][i-1]='b',Map[k][i+1]='c';
if (Map[k-1][i]=='/') {
if (i-1==Mx>>(n-line+1)||i-1==1) L[++cnt_l]=i-1,flag=1,Map[k][i-1]='o',last=i-1; else
if (last&&((i-1)-last)%(Mx>>(n-line-1))==0) L[++cnt_l]=i-1,flag=1,Map[k][i-1]='o'; else
Map[k][i-1]='/';
continue;
}
if (Map[k-1][i]=='b') {
if (i-1==Mx>>(n-line+1)||i-1==1) L[++cnt_l]=i-1,flag=1,Map[k][i-1]='a',last=i-1; else
if (last&&((i-1)-last)%(Mx>>(n-line-1))==0) L[++cnt_l]=i-1,flag=1,Map[k][i-1]='a'; else
Map[k][i-1]='b';
continue;
}
if (Map[k-1][i]=='\\') {
int T=Mx-(i+1);
if (T%(Mx>>(n-line+1))==0) R[++cnt_r]=i+1,flag=1,Map[k][i+1]='o',last1=T; else
if (last1&&(last1-T+1)%(Mx>>(n-line-1))==0) R[++cnt_r]=i+1,flag=1,Map[k][i+1]='o'; else
Map[k][i+1]='\\';
continue;
}
if (Map[k-1][i]=='c') {
int T=Mx-(i+1);
if (T%(Mx>>(n-line+1))==0) R[++cnt_r]=i+1,flag=1,Map[k][i+1]='a',last1=T; else
if (last1&&(last1-T+1)%(Mx>>(n-line-1))==0) R[++cnt_r]=i+1,flag=1,Map[k][i+1]='a'; else
Map[k][i+1]='c';
continue;
}
}
int i=1,j=1;
while (i<=cnt_l&&j<=cnt_r)
if (L[i]<R[j]) C[++cnt]=L[i],++i; else C[++cnt]=(int)1e6+R[j],++j;
while (i<=cnt_l) C[++cnt]=L[i++];
while (j<=cnt_r) C[++cnt]=(int)1e6+R[j++];
UP(i,1,cnt) if (P[n-line+1][i]) {
if (C[i]<1e6) Right(k,C[i]); else Left(k,C[i]-(int)1e6);
}
UP(i,1,Mx) if (Map[k][i]!='\\'&&Map[k][i]!='/'&&Map[k][i]!='o'&&Map[k][i]!='a'&&Map[k][i]!='b'&&Map[k][i]!='c') Map[k][i]=' ';
make(k+1,line-1);
// if (flag) make(k+1,line-1); else make(k+1,line);
}
int main () {
IOS;
read(n),read(m);
UP(i,1,m) {read(x),read(y);if (x>10) continue;P[x][y]=1;}
add[1]=1; int S=1;
UP(i,2,14) add[i]=S+(i-1),S+=add[i];
Mx=(1<<(n-2))*6;
// cout<<1<<endl; return 0;
make(1,n);
UP(i,1,K) {
UP(j,1,Mx) putchar(Map[i][j]!='/'&&Map[i][j]!='\\'&&Map[i][j]!='o'?' ':Map[i][j]);
puts("");
}
}