#include <bits/stdc++.h> using namespace std; char a[4000][4000]; bool b[4000][4000]; int x=2100,y=2100,last,zn=0,zb=3333,zx=3333,zd=0,nofx; string fx[4]={"E","W","S","N"}; int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0},now; string cz[4]={"LEFT","RIGHT","GO"}; string go[2]={"FAIL","SUCC"}; bool check(){ if(b[x+1][y]==true&&b[x][y+1]==true&&b[x][y-1]==true&&b[x-1][y]==true){ return true; } return false; } struct node{ int x,y,fx; }; int main() { memset(b,0,sizeof(b)); a[x][y]='.'; string rj=""; queue<node>q; cout<<cz[0]<<'\n'; if(rj==""){ cin>>rj; if(rj=="E")now=0; if(rj=="W")now=1; if(rj=="S")now=2; if(rj=="N")now=3; q.push({x,y,now}); } while (!q.empty()) { node p=q.front(); int cc; x=p.x; y=p.y; q.pop(); b[x][y]=true; for(int i=0;i<=3;i++){ cout<<cz[0]<<"\n"; cin>>rj; if(rj=="E")nofx=0; if(rj=="W")nofx=1; if(rj=="S")nofx=2; if(rj=="N")nofx=3; cc=2; cout<<cz[cc]<<'\n'; cin>>rj; if(rj==go[0])now=-1; if(rj==go[1])now=4; if(now==4){ a[x+dx[nofx]][y+dy[nofx]]='.'; b[x+dx[nofx]][y+dy[nofx]]=true; zn=max(zn,x+dx[nofx]); zb=min(zb,x+dx[nofx]); zx=min(zx,y+dy[nofx]); zd=max(zd,y+dy[nofx]); q.push({x+dx[nofx],y+dy[nofx],nofx}); } else{ zn=max(zn,x+dx[nofx]); zb=min(zb,x+dx[nofx]); zx=min(zx,y+dy[nofx]); zd=max(zd,y+dy[nofx]); a[x+dx[nofx]][y+dy[nofx]]='#'; b[x+dx[nofx]][y+dy[nofx]]=true; } } a[x][y]='.'; b[x][y]=true; if(check()){ cout << "END" << endl; cout << zn-zb+1 << " " << zd-zx+1 << endl; for (int i = zb; i <= zn; i++) { for (int j = zx; j <= zd; j++) { if(a[i][j]=='.')cout << a[i][j]; else cout<<'#'; } cout << endl; } break; } } return 0; }