#include<cstdio> #include<queue> #include<cstring> using namespace std; //bfs水题,只是换成了三维 int l,r,c; char matrix[35][35][35]; bool vis[35][35][35]; int nowx,nowy,nowz; int dis[6][3]= {{1,0,0},{-1,0,0},{0,-1,0},{0,1,0},{0,0,1},{0,0,-1}}; struct Node { int x; int y; int z; int steps; Node(int a,int b,int c,int cnt):x(a),y(b),z(c),steps(cnt) {} }; queue<Node>q; int BFS(int sx,int sy,int sz,int ex,int ey,int ez) { q.push(Node(sx,sy,sz,0)); vis[sx][sy][sz] = 1; while(!q.empty()) { Node now = q.front(); if(now.x==ex&&now.y==ey&&now.z==ez) return now.steps; q.pop(); for(int i = 0; i<6; ++i) { nowx = now.x + dis[i][0]; nowy = now.y + dis[i][1]; nowz = now.z + dis[i][2]; if(nowx>=0&&nowx<l&&nowy>=0&&nowy<r&&nowz>=0&&nowz<c) { if(!vis[nowx][nowy][nowz]&&matrix[nowx][nowy][nowz]!='#') { q.push(Node(nowx,nowy,nowz,now.steps+1)); vis[nowx][nowy][nowz] = 1; } } } } return -1; } int main() { int sx,sy,sz; int ex,ey,ez; int ans = 0; while(scanf("%d%d%d",&l,&r,&c),l) { memset(vis,0,sizeof(vis)); while(!q.empty()) q.pop(); for(int i = 0; i<l; ++i) { getchar(); for(int j = 0; j<r; ++j) { for(int k = 0; k<c; ++k) { matrix[i][j][k] = getchar(); if(matrix[i][j][k]=='S') { sx = i; sy = j; sz = k; } else if(matrix[i][j][k]=='E') { ex = i; ey = j; ez = k; } } getchar(); } } ans = BFS(sx,sy,sz,ex,ey,ez); if(ans==-1) printf("Trapped!\n"); else printf("Escaped in %d minute(s).\n",ans); } return 0; }