#include using namespace std; using ll = long long; using pll = pair; #define all(a) (a).begin(), (a).end() #define pb push_back #define fi first #define se second mt19937_64 rng(chrono::system_clock::now().time_since_epoch().count()); const ll MOD1000000007 = 1000000007; const ll MOD998244353 = 998244353; const ll MOD[3] = {999727999, 1070777777, 1000000007}; const ll LINF = 1LL << 60LL; const int IINF = (1 << 30) - 1; void solve(){ int h, w, m; cin >> h >> w >> m; vector s(h); for(int i=0; i> s[i]; int si, sj, gi, gj; for(int i=0; i>> dist(h, vector>(w, vector(m+1, -1))); queue> que; dist[si][sj][m] = 0; que.emplace(si, sj, m); int di[4] = {1, 0, -1, 0}; int dj[4] = {0, 1, 0, -1}; while(!que.empty()){ auto [i, j, k] = que.front(); que.pop(); for(int d=0; d<4; d++){ int ni = i + di[d]; int nj = j + dj[d]; if(ni < 0 || ni >= h || nj < 0 || nj >= w) continue; if(s[ni][nj] == '#') continue; if('a' <= s[ni][nj] && s[ni][nj] <= 'z'){ if(k != (int)(s[ni][nj]-'a')) continue; if(dist[ni][nj][k] != -1) continue; dist[ni][nj][k] = dist[i][j][k] + 1; que.emplace(ni, nj, k); }else if('1' <= s[ni][nj] && s[ni][nj] <= '9'){ if(dist[ni][nj][s[ni][nj]-'0'-1] != -1) continue; dist[ni][nj][s[ni][nj]-'0'-1] = dist[i][j][k] + 1; que.emplace(ni, nj, (int)(s[ni][nj]-'0')-1); }else{ if(dist[ni][nj][k] != -1) continue; dist[ni][nj][k] = dist[i][j][k] + 1; que.emplace(ni, nj, k); } } } int ans = -1; for(int i=0; i<=m; i++){ if(dist[gi][gj][i] == -1) continue; if(ans == -1 || ans > dist[gi][gj][i]) ans = dist[gi][gj][i]; } cout << ans << endl; } int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); int T=1; //cin >> T; while(T--) solve(); }