#include using namespace std; #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) #define ll long long const long long mod=998244353; const long long hmod=46216567629137; int main(){ cin.tie(0)->sync_with_stdio(0); cout.tie(0); int H,W,M; cin>>H>>W>>M; char S[H+2][W+2]; pairstart,goal; for(int i=0;i<=H+1;i++){ for(int j=0;j<=W+1;j++){ if(i==0||i==H+1||j==0||j==W+1) S[i][j]='#'; else{ cin>>S[i][j]; if(S[i][j]=='S') start={i,j}; if(S[i][j]=='G') goal={i,j}; } } } ll dist[H+2][W+2][M+1]; for(int i=0;i<=H+1;i++){ for(int j=0;j<=W+1;j++){ for(int k=0;k<=M;k++) dist[i][j][k]=2e18; } } dist[start.first][start.second][0]=0; queue>Q; Q.emplace(start.first,start.second,0); const int dx[4]={0,0,-1,1},dy[4]={-1,1,0,0}; while(!Q.empty()){ int h=get<0>(Q.front()),w=get<1>(Q.front()),key=get<2>(Q.front()); Q.pop(); for(int i=0;i<4;i++){ int nh=h+dx[i],nw=w+dy[i]; if(S[nh][nw]=='.' || S[nh][nw]=='S' || S[nh][nw]=='G'){ if(dist[h][w][key]+1='a' && S[nh][nw]<='i'){ int next_key=S[nh][nw]-'a'+1; if(key==next_key && dist[h][w][key]+1='1' && S[nh][nw]<='9'){ int next_key=S[nh][nw]-'1'+1; if(dist[h][w][key]+1