#include #include #include #include using namespace std; #define FOR(i,n) for(int i = 0; i < n; i++) int dx[4] = { 0, 1 , 0 ,-1}; int dy[4] = { -1, 0 , 1, 0}; int main(void){ char pole[150][150]; char line[50]; int priznak[150][150][4]; // [0] ~ dx = 0, dy = 1 // [1] ~ dx = 1, dy = 0 // [2] ~ dx = 0, dy = -1 // [3] ~ dx = -1, dy = 0 // pokud se rovna 1 pak lze uniknout // -1 uz jsem tu byl // 2 odtud uniknout nelze int poz[150*150][3]; //[0] = natoceni [1] = x [2] = y int w,h; while(scanf(" %d%d", &h,&w) == 2){ FOR(i,h){ FOR(j,w){ FOR(k,4){ priznak[i][j][k] = 0; } } } FOR(i,h){ scanf(" %s",pole[i]); } int n; scanf(" %d",&n); scanf(" %s", line); int lzeUtect = 0; FOR(i,h){ FOR(j,w){ int index = 0; int index_poz = 0; int natoceni = 0; int x = j; int y = i; if(pole[y][x] == 'E'){ priznak[y][x][0] = 1; priznak[y][x][1] = 1; priznak[y][x][2] = 1; priznak[y][x][3] = 1; continue; } if(pole[y][x] == 'X'){ continue; } while(true){ if(index == 0){ poz[index_poz][0] = natoceni; poz[index_poz][1] = x; poz[index_poz][2] = y; index_poz++; if(priznak[y][x][natoceni] == -1){ while(--index_poz >= 0){ priznak[poz[index_poz][2]][poz[index_poz][1]] [poz[index_poz][0]] = 2; } break; }else if(priznak[y][x][natoceni] == 2){ while(--index_poz >= 0){ priznak[poz[index_poz][2]][poz[index_poz][1]] [poz[index_poz][0]] = 2; } break; }else if(priznak[y][x][natoceni] == 1){ while(--index_poz >= 0){ priznak[poz[index_poz][2]][poz[index_poz][1]] [poz[index_poz][0]] = 1; } break; } priznak[y][x][natoceni] = -1; } if(line[index] == 'S'){ x += dx[natoceni]; y += dy[natoceni]; if( x < 0) x = 0; if( y < 0) y = 0; if( x >= w) x = w - 1; if( y >= h) y = h - 1; if(pole[y][x] == 'E'){ while(--index_poz >= 0){ priznak[poz[index_poz][2]][poz[index_poz][1]] [poz[index_poz][0]] = 1; } break; } if(pole[y][x] == 'X'){ x -= dx[natoceni]; y -= dy[natoceni]; } }else if(line[index] == 'R'){ natoceni++; natoceni %= 4; }else if(line[index] == 'L'){ natoceni += 3; natoceni %= 4; } index++; index %= n; } } } FOR(i,h){ FOR(j,w){ if(priznak[i][j][0] == 1){ lzeUtect++; } } } if(lzeUtect == w*h){ printf("OK\n"); }else if(lzeUtect < w*h){ printf("%d\n",lzeUtect); }else{ printf("chyba\n"); } } return 0; }