https://www.lanqiao.cn/problems/17109/learning/

#include<bits/stdc++.h>
#define lc p<<1
#define rc p<<1|1
#define INF 1e18
using namespace std;
#define lowbit(x) x&(-x)
#define endl '\n'
using ll = long long;
using int128 = __int128;
using pii = pair<ll,ll>;
const double PI = acos(-1);
const int N=1e3+10;
bool st[N][N][15];
char g[N][N];
int dy[4]={1,-1,0,0};
int dx[4]={0,0,-1,1};
int ans;
int n,m,K;
bool flag=0;
void bfs(){
	queue<array<int,3>>q;
	q.push({1,1,1});
	while(q.size()){
		int t=q.size();
		while(t--){
			auto p=q.front();
			q.pop();
			int x=p[0],y=p[1],k=p[2];
			if(x==n&&y==m){
				flag=1;
				return;
			}
			for(int i=0;i<4;i++){
				int nx=x+dx[i],ny=y+dy[i];
				if(k==K&&g[nx][ny]!=g[x][y]&&!st[nx][ny][1]&&nx>=1&&nx<=n&&ny>=1&&ny<=m){
					st[nx][ny][1]=1;
					q.push({nx,ny,1});
				}
				else if(k<K&&g[nx][ny]==g[x][y]&&!st[nx][ny][k+1]&&nx>=1&&nx<=n&&ny>=1&&ny<=m){
					st[nx][ny][k+1]=1;
					q.push({nx,ny,k+1});
				}
			}
		}
		ans++;
	}
}
void solve(){
	cin>>n>>m>>K;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>g[i][j];
		}
	}
	bfs();
	if(flag) cout<<ans;
	else cout<<-1;
}


int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr), cout.tie(nullptr);
	
	int T = 1;
//	cin>>T;
	while (T--) {
		solve();
	}
	
	return 0;
}