#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define me(s) memset(s,0,sizeof(s)) #define pb push_back typedef long long ll; typedef unsigned int uint; typedef unsigned long long ull; typedef pair P; const int N=256; int n,m,target; mapsol; queueq; bool icy[N]; char link_l[N],link_r[N],clear_l[N],clear_r[N]; void init() { memset(icy,0,sizeof(icy)); icy['O']=icy['[']=icy[']']=icy['=']=true; memset(link_l,' ',sizeof(link_l)); link_l['O']=']';link_l['[']='='; memset(link_r,' ',sizeof(link_r)); link_r['O']='[';link_r[']']='='; memset(clear_l,' ',sizeof(clear_l)); clear_l[']']='O';clear_l['=']='[';clear_l['O']='O';clear_l['[']='['; memset(clear_r,' ',sizeof(clear_r)); clear_r['[']='O';clear_r['=']=']';clear_r['O']='O';clear_r[']']=']'; } string fall(string s) { int k,r,p; for(int i=n-1;i>=0;i--) for(int j=0;jtarget/m)b=x/m-target/m; else b=(x/mb?a:b; } bool expand(string s,char cmd) { string seq=sol[s]+cmd; int x=s.find('@'); s[x]='.'; if(cmd=='<'||cmd=='>') { s[x]='@'; int p=(cmd=='<'?x+m-1:x+m+1); if(s[p]=='X')return false; else if(s[p]=='.') { s[p]='O'; if(icy[s[p-1]])s[p-1]=link_r[s[p-1]]; if(s[p-1]!='.')s[p]=link_l[s[p]]; if(icy[s[p+1]])s[p+1]=link_l[s[p+1]]; if(s[p+1]!='.')s[p]=link_r[s[p]]; } else { s[p]='.'; if(icy[s[p-1]])s[p-1]=clear_r[s[p-1]]; if(icy[s[p+1]])s[p+1]=clear_l[s[p+1]]; } } else { int p=(cmd=='L'?x-1:x+1); if(s[p]=='.')s[p]='@'; else { if(s[p]=='O') { int k; if(cmd=='L'&&s[p-1]=='.') { for(k=p-1;k>0;k--)if(s[k-1]!='.'||s[k+m]=='.')break; s[p]='.';s[k]='O';s[x]='@'; } if(cmd=='R'&&s[p+1]=='.') { for(k=p+1;k15)return false; if(s.find('@')==target) { printf("%s\n",seq.c_str()); return true; } if(!sol.count(s)) { sol[s]=seq; q.push(s); } return false; } int main() { int rnd=0; init(); while(~scanf("%d%d",&n,&m)) { if(!n)break; char mp[20][20]; for(int i=0;i'))break; if(expand(s,'L'))break; if(expand(s,'R'))break; } while(!q.empty())q.pop(); } }