#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define FOR(i,a) for(int i=0; i= 0 && y >= 0 && x < a && y < b && m[x][y] != 'X'); } int solve(int posA,int posB) { // bool debug = posA == 0 && posB == 3; memset(mem, 0, sizeof(mem) ); int i = 0; d = 0; //printf("start %d %d\n", posA, posB); if( m[posA][posB] == 'X' ) return 0; while(1) { // if (debug) // printf("%d %d %d %c\n", posA, posB, d, inst[i]); if( m[posA][posB] == 'E' ) return 1; if( mem[posA][posB][i][d] == 1 ) return 0; mem[posA][posB][i][d] = 1; if( inst[i] == 'L' ) { d--; if( d < 0) d=3; } if( inst[i] == 'R' ) { d++; if (d > 3) d = 0; } int newA = posA, newB = posB; if(inst[i] == 'S') { if(d == 0) newA--; if(d == 1) newB++; if(d==2) newA++; if(d==3) newB--; if( check( newA, newB) ) { posA = newA; posB = newB; } } i++; if(i >= n) i=0; } } int main() { while( scanf("%d %d", &a, &b) == 2 ) { // printf("%d %d\n", a, b); int pocetPol = 0; FOR(i,a) { FOR(j,b) { scanf(" %c ", &m[i][j]); // printf("%c", m[i][j]); if (m[i][j] != 'X') ++pocetPol; } //printf("\n"); } scanf("%d", &n); FOR(i,n) { scanf(" %c ", &inst[i]); } int s = 0; FOR(i,a) { FOR(j,b) { if( solve(i,j) ) s++; // printf("%d %d\n", i, j); } } if( s == pocetPol ) printf("OK\n"); else printf("%d\n", s); } return 0; }