#include #include #include #include #include using namespace std; using ll = long long; using P = pair; using tu = tuple; int main(){ int h, w, m; cin >> h >> w >> m; vector s(h); int si, sj, gi, gj; for(int i=0; i> s[i]; for(int j=0; j>(w, vector(m+1, -1))); queue bfs; bfs.emplace(si, sj, 0, m); int di[4]={-1, 0, 1, 0}; int dj[4]={0, 1, 0, -1}; while(bfs.size()){ auto [i, j, cnt, key]=bfs.front(); bfs.pop(); //cout << "? " << i << ' ' << j << ' ' << cnt << ' ' << key << endl; if(seen[i][j][key]!=-1) continue; seen[i][j][key]=cnt; for(int k=0; k<4; k++){ int ni=i+di[k], nj=j+dj[k]; if(ni<0||nj<0||ni>=h||nj>=w) continue; if(s[ni][nj]=='#') continue; //cout << "?? " << ni << ' ' << nj << ' ' << k << ' ' << s[ni][nj] << endl; char now=s[ni][nj]; if(now=='.'||now=='S'||now=='G'){ //cout << "?" << endl; if(seen[ni][nj][key]==-1){ bfs.emplace(ni, nj, cnt+1, key); continue; } else continue; } if(now-'1'>=0&&now-'1'=0) ans=min(ans, seen[gi][gj][i]); if(ans==1e8) cout << -1 << endl; else cout << ans << endl; return 0; }