#include #include using namespace std; int main() { int x, y; while(cin >> x >> y) { char **maze = new char*[x]; for(int i = 0;i < x; i++) { maze[i] = new char[y]; } int pocetM = 0; for(int i = 0; i < x; i++) { for(int j = 0; j < y; j++) { cin >> maze[i][j]; if(maze[i][j] == '.' || maze[i][j] == 'E') pocetM++; } } /*for(int i = 0;i < x; i++) { for(int j = 0; j < y; j++) { cout << maze[i][j] << " "; } cout << endl; } */ int pocetKroku; cin >> pocetKroku; string kroky; cin >> kroky; int pocetUniku = 0; bool vsechnPoz = true; for(int i = 0;i < x; i++) { for(int j = 0; j < y; j++) { if(maze[i][j] == 'X') continue; int pozX = i; int pozY = j; char smer = 'U'; //cout << "NOVY" << endl; int pocX = i; int pocY = j; for(int a = 0, l = 0; l < (kroky.length() * 10); a++ ,l++) { if(a == kroky.length()) a = 0; if(pocX == pozX && pocY == pozY && smer == 'U' && a == 0 && l > 0) break; //cout << smer << " "<< kroky[a] << " " << pozX << " " << pozY << endl; if(maze[pozX][pozY] == 'E') { pocetUniku++; //cout << "UNIK " << pocetUniku << endl; break; } else if(kroky[a] == 'S') { if(smer == 'U' && pozX > 0) { if(maze[pozX - 1][pozY] != 'X') { pozX--; } } if(smer == 'R' && pozY < (y - 1)) { if(maze[pozX][pozY + 1] != 'X') { pozY++; } } if(smer == 'D' && pozX > (x - 1)) { if(maze[pozX + 1][y] != 'X') { pozX++; } } if(smer == 'L' && pozY > 0) { if(maze[pozX][pozY - 1] != 'X') { pozY--; } } } if(kroky[a] == 'L') { if(smer == 'U') smer = 'L'; else if(smer == 'L') smer = 'D'; else if(smer == 'D') smer = 'R'; else if(smer == 'R') smer = 'U'; } else if(kroky[a] == 'R') { if(smer == 'U') smer = 'R'; else if(smer == 'R') smer = 'D'; else if(smer == 'D') smer = 'L'; else if(smer == 'L') smer = 'U'; } } } } if(pocetUniku == pocetM) cout << "OK" << endl; else cout << pocetUniku << endl; } return 0; }