#include "bits/stdc++.h"
using namespace std;

#define FAST ios_base::sync_with_stdio(false); cin.tie(0);
#define pb push_back
#define eb emplace_back
#define ins insert
#define ph push
#define f first
#define s second
#define cbr cerr << "hi\n"
#define mmst(x, v) memset((x), v, sizeof ((x)))
#define siz(x) ((ll)x.size())
#define all(x) (x).begin(), (x).end()
#define lbd(x, y) lower_bound(all(x), y)
#define ubd(x, y) upper_bound(all(x), y)
#define btinpct(x) __builtin_popcountll((x))
mt19937 rng(210);    //can be used by calling rng() or shuffle(A, A+n, rng)
inline long long rand(long long x, long long y) { return (rng() % (y+1-x)) + x; } //inclusivesss
string inline to_string(char c) {string s(1,c);return s;} template<typename T> inline T gcd(T a,T b){ return a==0?b:gcd(b%a,a); }

#define ll long long int 
#define ld long double
#define FOR(ii, ss, ee) for(ll ii = (ss); ii <= (ll)(ee); ++ii)
#define DEC(ii, ss, ee) for(ll ii = (ss); ii >= (ll)(ee); --ii)
typedef pair <ll, ll> pi; typedef pair <ll, pi> spi; typedef pair <pi, pi> dpi;

#define LLINF ((long long) 1e18)//1234567890987654321
#define INF 1234567890ll
// #define cerr if(0)cout
#define MAXN (300006)
ll n, m, k,sum[302][302],ans[302][302],co;
vector<pi> cake;
char grid[302][302];
// struct node {
	// int s,e,m;
	// ll v;
	// node *l,*r;
	// node(ll _S, ll _E) {
		// s=_S,e=_E,m=(s+e)>>1;
		// v=-1;
		// if(s^e) {
			// l=new node(s,m);
			// r=new node(m+1,e);
		// }
	// }
	// void update(ll x,ll nval) {
		// if(s==e) {
			// v=max(v,nval);
			// return;
		// }
		// if(x>m) return r->update(x,nval); else l->update(x,nval);
		// v=max(l->v,r->v);
	// }
	// ll rmq(ll x,ll y) {
		// if(s==x&&e==y) return v;
		// if(x>m) return r->rmq(x,y);
		// else if(y<=m) return l->rmq(x,y);
		// else return max(l->rmq(x,m),r->rmq(m+1,y));
	// }
// };
// struct node2d {
	// int s,e,m;
	// node *v;
	// node2d *l,*r;
	// node2d(ll _S,ll _E) {
		// s=_S,e=_E,m=(s+e)>>1;
		// v=new node(1, m);
		// if(s^e) {
			// l=new node2d(s, m);
			// r=new node2d(m+1, e);
		// }
	// }
	// void update(ll x,ll y,ll nval) {
		// v->update(y, nval);
		// if(s==e) {
			// return;
		// }
		// if(x>m)  r->update(x,y,nval); else l->update(x,y,nval);
		// return;
	// }
	// ll rmq(ll x,ll y,ll c,ll d) {
		// if(s==x&&e==y) {
			// return v->rmq(c, d);
		// }
		// if(x>m) return r->rmq(x, y);
		// else if(y<=m) return l->rmq(x,y);
		// else return max(l->rmq(x,m),r->rmq(m+1,y));
	// }
// } *seg;
void fill(ll a,ll b,ll c,ll d) {
	FOR(i,a,c) FOR(j,b,d) ans[i][j]=co;
	++ co;
}
ll query(ll a,ll b,ll c,ll d) { return sum[c][d]-sum[c][b-1]-sum[a-1][d]+sum[a-1][b-1]; }
void solve(ll a,ll b,ll c,ll d) {
	if(query(a,b,c,d) == 1) {
		// cerr<<"done: "<<a<<' '<<b<<' '<<c<<' '<<d<<'\n';
		fill(a,b,c,d);
		return;
	}
	assert(query(a,b,c,d)>1);
	// cerr<<a<<' '<<b<<' '<<c<<' '<<d<<'\n';
	while(1) {
		ll row = (a!=c?rand(a, c-1):-1);
		ll col = (b!=d?rand(b, d-1):-1);
		if(row != -1 && query(a, b, row, d) && query(row+1, b, c, d)) { solve(a,b,row,d), solve(row+1,b,c,d); return; }
		if(col != -1 && query(a,b,c,col) && query(a,col+1,c,d)) { solve(a,b,c,col), solve(a,col+1,c,d); return; } 
	}
}
int main()
{
	FAST
	cin>>n>>m>>k;
	// seg=new node2d(1, n);
	FOR(i,1,n) FOR(j,1,m) {
		cin>>grid[i][j];
		sum[i][j]=(grid[i][j]=='#')+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
		cake.eb(i,j);
		// seg->update(i, j, ++co);
	}
	co=1;
	solve(1, 1, n, m);
	FOR(i,1,n) FOR(j,1,m) { assert(ans[i][j]);
		cout<<ans[i][j]<<" \n"[j==m];
	}
}


Measured memory_bytes: 4336