#include<bits/stdc++.h>
#define ll                  long long
#define dl                 double
#define pb                push_back
#define F                  first
#define S                  second
#define endl              "\n"
#define rep(i,a,b)       for(i=a;i<b;i++)
#define all(v)             v.begin(),v.end()
#define allr(v)            v.rbegin(),v.rend()
#define mod              1000000007
#define CIN(V,s,n)      for(int i=s;i<n;i++){cin >> V[i];}
#define COUT(V,s,n)   {for(ll i2=s;i2<n;i2++){cout <<  V[i2] << " "  ;} cout << endl;}
#define fast               ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define CLEAR(V);      for(ll i=0;i<V.size();i++) V[i] = 0;
#define N                  500005LL
#define tmod            998244353
using namespace std;

bool sBs(const pair<int,int> &a,const pair<int,int> &b)
{   if(a.first!=a.second)return (a.first < b.first);
    else return a.second > b.second;}

ll SUMD(ll n);
ll BS(vector<ll> &PS,ll s,ll e,ll ser);
ll MI(ll a, ll m);
bool P[N+1];
ll LPF[N+1];
void Sieve(int n=N);
ll Powb(ll b,ll n);

int main()
{
//fast;
ll t,q=1;
//cin >> q;
t = q;
while(q--)
{
    ll i,n,m,k,j,l,r,c=0,b,a,g,counter=0,u,v,d,e,p,x,y,flag=1;
    //n=m=i=j=l=r=a=t=b=c=u=v=w=p=x=y=0;
    cin >> n >>m >> k;
    vector<string> P(n);
    for(i=0;i<n;i++) cin >>  P[i];
    vector<vector<ll> > G(n,vector<ll> (m));
    int ac = 1;
   // cout << "ok ";
    for(i=0;i<n;i++)
    {
       for(j=0;j<m;j++)
       {
            if(P[i][j]=='#')
            {
                r = i; c = j;
                int i1,j1;
                while(r>=0 and G[r][j]==0) r--;
                while(c>=0 and G[i][c]==0) c--;
                for(i1 = max(0LL,r+1);i1<=i;i1++)
                for(j1 = max(0LL,c+1);j1<=j;j1++)
                { G[i1][j1] = ac;}
                ac++;
            }
       }
      // for(auto i1=0;i1<m;i1++) cout << G[i][i1] << " " ; cout << endl;
       if(ac != 1 and G[i][m-1]==0)
       {
           int i1;
           if(G[i][0]==0)
           {
               for(i1=0;i1<m;i1++)
               {
                   G[i][i1] = G[i-1][i1];
               }
           }
           else
           {
               for(i1=0;i1<m;i1++)
               {
                   if(G[i][i1]==0) G[i][i1]=G[i][i1-1];
               }
           }

          // for(auto i1=0;i1<m;i1++) cout << G[i][i1] << " " ; cout << endl;
       }
    }
    for(i=0;i<n;i++)
       {
           for(j=1;j<m;j++)
           {
               if(G[i][j]==0) G[i][j] = G[i][j-1];
           }
       }
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
            cout << G[i][j] <<   " ";
        cout << endl;
    }

}
return 0;
}


ll Powb(ll b,ll n)
{
    if(n==0) return 1LL;
    if(n==1) return b;
    ll temp = Powb(b,n/2);
    if(n%2==0){return (temp*temp)%mod;}
    else{return (b*((temp*temp)%mod))%mod;}
}

ll SUMD(ll n)
{   ll sum=0;
    while(n>0){sum += n%10;n = n/10;}
    return sum;

}
ll BS(vector<ll> &PS,ll s,ll e,ll ser)
{
    if(s>e)
        return s;
    ll mid = (s+e)/2;
    if(PS[mid]==ser)
    {
        return mid;
    }
    else if(PS[mid] > ser)
    {
        return BS(PS,s,mid-1,ser);
    }
    else
        return BS(PS,mid+1,e,ser);
}
ll MI(ll a, ll m)
{
    ll m0 = m;
    ll y = 0, x = 1;
    if (m == 1)
      return 0;
    while (a > 1)
    {
        ll q = a / m;
        ll t = m;
        m = a % m, a = t;
        t = y;
        y = x - q * y;
        x = t;
    }
    if (x < 0)
       x += m0;
    return x;
}

void Sieve(int n)
{
    memset(P,true,sizeof(P));
    P[0] = false;
    P[1]= false;
    for(int i=1;i<=n;i++)
        LPF[i] = i;
    for(ll i=2;i*i<=n;i++)
    {
        if(P[i])
        {
            for(ll j=i+i;j<=n;j+=i)
            {
                P[j]=false;
                LPF[j] = i;
            }
        }
    }

}



Measured memory_bytes: 1664