#include <bits/stdc++.h>
using namespace std;

int n,m,d,up,down,left1,right1,map1[507][507],x,y,df[4][2] = {{0,1},{0,-1},{1,0},{-1,0}},flag,g;

string get_command(){
	if (flag){
		flag = 0;
	    return "GO";
	}
	else{
		flag = 1;
		return "LEFT";
	}
}

int main(){
	memset(map1,0,sizeof(map1));
	x = 200;y = 200;g = 0;
	//Do not need freopen;
	while (true){
		string feedback;
		string command = get_command();
		cout << command << endl;
		feedback = get_feedback(command);
		if (g >= 49999){
			cout << "END" << endl;
			for (int i = 0;i < 500 && !up;i++){
				for (int j = 0;j < 500;j++){
					if (map1[i][j]){
						left1 = j;
						up = i;
						break;
					}
				}
			}
			for (int i = 499;i >= 0 && !down;i--){
				for (int j = 499;j >= 0;j--){
					if (map1[i][j]){
						right1 = j;
						down = i;
						break;
					}
				}
			}
			n = down - up + 1;m = right1 - left1 + 1;
			cout << n << " " << m << endl;
			for (int i = 0;i < n;i++){
				for (int j = 0;j < m;j++){
					cout << (map1[up + i][left1 + j] == 1 ? '.' : '#');
				}
				cout << endl;
			} 
			break;
		}
		else{
			//do sth.
			if (command == "LEFT" || command == "RIGHT"){
				if (feedback == "E"){
					d = 0;
				} 
				else if (feedback == "W"){
					d = 1;
				}
				else if (feedback == "S"){
					d = 2;
				}
				else{
					d = 3;
				}
			} 
			else{
				if (feedback != "SUCC"){
					x += df[d][0];
					y += df[d][1];
					map1[x][y] = 1;
				}
				else{
					map1[x][y] = 2;
				}
			}
		}
		g++;
	}
	return 0;
}