记录状态,走过的无需再走
#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int N = 100 + 5;
char s[N][N];
int r, c, k, si, sj, dir[2][4] = { {-1,1,0,0},{0,0,-1,1} };
bool vis[N][N][15];
struct Node {
int i, j, d;
Node(int i = 0, int j = 0, int d = 0) :i(i), j(j), d(d) {}
};
int bfs() {
memset(vis, 0, sizeof(vis));
queue<Node> q;
q.push(Node(si, sj, 0));
vis[si][sj][0] = 1;
while (!q.empty()) {
Node tp = q.front();
q.pop();
for (int i = 0; i < 4; i++) {
int ii = tp.i + dir[0][i];
int jj = tp.j + dir[1][i];
if (0 <= ii && ii < r && 0 <= jj && jj < c && (s[ii][jj] != '#' || (tp.d+1)%k==0)) {
if (vis[ii][jj][(tp.d + 1) % k]) continue;
vis[ii][jj][(tp.d + 1) % k] = 1;
q.push(Node(ii, jj, tp.d + 1));
if (s[ii][jj] == 'E') return tp.d + 1;
}
}
}
return -1;
}
int main() {
int t; scanf("%d", &t);
while (t--) {
scanf("%d%d%d", &r, &c, &k);
for (int i = 0; i < r; i++)
for (int j = 0; j < c; j++)
{
scanf(" %c", &s[i][j]);
if (s[i][j] == 'S') {
si = i, sj = j;
}
}
int ans = bfs();
if (ans == -1) printf("Oop!\n");
else printf("%d\n", ans);
}
return 0;
}