#include <bits/stdc++.h>
#define r(i,n) for(int i=0;i<n;i++)
#define int long long
using namespace std;
typedef pair<int,int>P;
#define F first
#define S second

void INPUT();
int s_to_i(string z);

string s[55],com[1000],DIR[1000];
int x,y,gx,gy,n,h,w,ppp=1;

void GO(int Y,int X){
	if(s[y-1][x]=='3')s[y-1][x]='2';
	else if(s[y-1][x]=='2')s[y-1][x]='1';
	else if(s[y-1][x]=='1')s[y-1][x]='.';
	y = Y;
	x = X;
}

void Moveto(int t){
	if(s[y][t]!='.'||x==t||y==h-1)return;

	int off=(x<t?1:-1);
	int nx=x;

	if(y==1){
		GO(y,t);
		return;
	}

	int f=0;

	while(0<=nx&&nx<w&&nx!=t){
		if(s[y-1][nx+off]=='.')return;
		nx+=off;
	}

	GO(y,nx);
	return;
}

void Climb(string z){
	int ty=1;
	int tx=(z=="LEFT"?-1:1);
	if(y>=h-2)return;
	if( y+ty<0 || h<=y+ty || x+tx<0 || w<=x+tx )return;
	if( s[y][x+tx] == '.' )return;
	if( s[y+1][x+tx] == '.' && s[y+1][x] == '.' ){
		GO(y+ty,x+tx);
	}
	return;
}

void Getdown(string z){
	int ty=-1;
	int tx=(z=="LEFT"?-1:1);
	if( y+ty<0 || h<=y+ty || x+tx<0 || w<=x+tx )return;
	if( s[y][x+tx] == '.' && s[y-1][x+tx] == '.' ){
		GO(y+ty,x+tx);
	}
	return;
}

void Pull(string z){
	int tx=(z=="LEFT"?1:-1);
	if( x+tx<0 || w<=x+tx )return;
	if( x-tx<0 || w<=x-tx )return;
	if( s[y][x+tx] == 'C' )return;
	if( s[y][x+tx] == '.' )return;
	if( s[y][x-tx] != '.' )return;
	s[y][x]=s[y][x+tx];
	s[y][x+tx]='.';
	GO(y,x-tx);
	return;
}

void Push(string z){
	int tx=(z=="LEFT"?-1:1);
	if( x+tx<0 || w<=x+tx )return;
	int nx=x+tx;
	while(0<=nx&&nx<w&&s[y][nx]!='.'){
		if(s[y][nx]=='C')return;
		nx+=tx;
	}
	//r(i,h)cout<<s[h-1-i]<<endl;
	nx-=tx;
	for(int i=nx;i!=x;i-=tx){
		int p=i;
		while(1){
			if(p+tx<0 || w<=p+tx){
				s[y][p]='.';
				break;
			}
			if(s[y][p+tx]!='.')break;
			s[y][p+tx]=s[y][p];
			s[y][p]='.';
			if(!((s[y][p+tx]=='I'&&s[y-1][p+tx]!='.')||(s[y-1][p+tx]=='I')))break;
			p+=tx;
		}
	}
	//r(i,h)cout<<s[h-1-i]<<endl;
}

int RAKKA(){
//if(ppp==1920){s[y][x]='S';r(i,h)cout<<s[h-1-i]<<endl;s[y][x]='.';}
//cout<<y<<' '<<x<<endl;
	L:;
	r(i,h-1)r(j,w){
	//	cout<<i<<' '<<j<<endl;
		if(s[i][j]=='B'){
	//		cout<<i<<' '<<j<<endl;
			if(i+1==y&&j==x)return 2;
			if(ppp>=1900&&s[i+1][j]=='G')continue;
			s[i+1][j]='.';
		}
	}
	int T=0;
	while(s[y-1][x]=='.')y--,T++;
	if(T)goto L;
	int XXX=0;
	//s[y][x]='S';r(i,h)cout<<s[h-1-i]<<endl;s[y][x]='.';
	r(i,h-1)r(j,w){
	//	cout<<i<<' '<<j<<endl;
		if(s[i][j]=='G'){
			if(i!=gy||j!=gx)return 4;
			if(i+1==y&&j==x)return 1;
			XXX++;
		}
	//  cout<<i<<' '<<j<<endl;
	}
	if(!XXX)return 4;
	//cout<<y<<' '<<x<<endl;
	LL:;
	for(int i=2;i<h;i++){
		for(int j=0;j<w;j++){
			if(s[i][j]=='.')continue;
			//if(s[i][j]=='C')continue;
			int count=0;
			while(1){
				int sum=0;
				r(k,3){
					if(j+k-1<0||w<=j+k-1)continue;
					if(s[i-1][j+k-1]!='.')sum++;
				}
				if(sum)break;
				count++;
				T++;
				s[i-1][j]=s[i][j];
				s[i][j]='.';
				i--;
				//break;
				//cout<<i<<j<<endl;
			}
			if(s[y][x]!='.'){
			//	cout<<s[y][x]<<endl;
				return 3;
			}
			if(count) goto LL;
		}
	};
	if(T)goto L;
	//cout<<y<<x<<endl;
	return 0;
}


signed main(){
	while( 1 ){

		INPUT();
		r(i,n){
			int f=0;

			if(s[y-1][x]=='G'){
				cout<<"Game Over : Cleared"<<endl;
				break;
			}
			if(s[y-1][x]=='B'){
				cout<<"Game Over : Death by Hole"<<endl;
				break;
			}

			//cout<<i<<endl;

			if( com[i] == "MOVETO"  )  Moveto(s_to_i(DIR[i])-1);
			if( com[i] == "CLIMB"   )  Climb(DIR[i]);
			if( com[i] == "GETDOWN" )  Getdown(DIR[i]);
			if( com[i] == "PUSH"    )  Push(DIR[i]);
			if( com[i] == "PULL"    )  Pull(DIR[i]);

			//cout<<i<<endl;

			f = RAKKA();
			if(f==1){
				cout<<"Game Over : Cleared"<<endl;
				break;
			}
			if(f==2){
				cout<<"Game Over : Death by Hole"<<endl;
				break;
			}
			if(f==3){
				cout<<"Game Over : Death by Block"<<endl;
				break;
			}
			//cout<<i<<endl;
			if(f==4){
				cout<<"Game Over : Death by Walking Goal"<<endl;
				//return 0;
				break;
			}
			//cout<<i<<endl;

			if(i==n-1){
				cout<<"Game Over : Gave Up"<<endl;
				break;
			}
		}
		ppp++;
	}
}

void INPUT(){
	cin>>h>>w;
	if(h==0)exit(0);
	r(i,52)s[i]="";
	r(i,h)cin>>s[h-i];
	r(i,w)s[0]+='#';
	r(i,w)s[h+1]+='.';
	h+=2;
	cin>>n;
	r(i,n)cin>>com[i]>>DIR[i];
	r(i,h)r(j,w){
		if(s[i][j]=='S') y=i,x=j,s[i][j]='.';
		if(s[i][j]=='G') gy=i,gx=j;
	}
}

int s_to_i(string z){
	int sum=0;
	r(i,z.size()){
		sum=sum*10+z[i]-'0';
	}
	return sum;
}


Measured memory_bytes: 3240