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

int H, W, K;
vector<vector<char>> s;
int strayberry_number = 1;
vector<vector<int>> ans;


struct Pos{
    int w;
    int h;
};


//W方向を優先して探す
Pos findStrawberryDirectionW(int h_start, int h_end, int w_start, int w_end) {
    Pos p;
    p.h = -1;
    p.w = -1;

    for (int i = h_start; i <= h_end; ++i) {
        for (int j = w_start; j <= w_end; ++j)
        {
            if(s[i][j] == '#') {
                p.h = i;
                p.w = j;
                return p;
            }
        }
    }

    return p;
}

//H方向を優先して探す
Pos findStrawberryDirectionH(int h_start, int h_end, int w_start, int w_end) {
    Pos p;
    p.h = -1;
    p.w = -1;

    for (int i = w_start; i <= w_end; ++i) {
        for (int j = h_start; j <= h_end; ++j)
        {
            if(s[j][i] == '#') {
                p.h = j;
                p.w = i;
                return p;
            }
        }
    }

    return p;
}


void print() {
    for (int i = 0; i < ans.size(); ++i)
    {
        for (int j = 0; j < ans[i].size(); ++j)
        {
            printf("%d ", ans[i][j]);
        }
        cout << endl;
    }
    // cout << endl;
}


void cut(int h_start, int h_end, int w_start, int w_end, int cake_number) {
    // printf("--- cut ---\n");
    // printf("     h_start : %d\n", h_start);
    // printf("     h_end   : %d\n", h_end);
    // printf("     w_start : %d\n", w_start);
    // printf("     w_end   : %d\n", w_end);

    for (int i = h_start; i <= h_end; ++i)
    {
        for (int j = w_start; j <= w_end; ++j)
        {
            ans[i][j] = cake_number;
        }
    }
    // printf("---- print ----\n");
    // print();
}


void slove() {
    int h_start = 0;
    int h_end   = H; //番兵あり
    int w_start = 0;
    int w_end   = W; //番兵あり


    //切り分けたケーキの番号
    int cake_number = 1;
    //横方向に切り分けた区間
    vector<pair<int, int>> cut_section_h;


    //横に切る
    int h = h_start;
    Pos prev_second_pos;
    // cut_pos_h.push_back(0);
    for (; h < h_end; ){ 
        //1つ目のいちご　と　2つ目のいちご　を見つける
        //    2つ目のいちごは必ず見つかる(h_endに番兵があるので)
        //    横方向に切るときはW方向の番兵は無視したいのでw_end-1までしか調べない
        Pos first_pos;
        if(h > 0) { //初回以外は「1回前に調べた"2つ目"」が最初に出現するいちご
            first_pos = prev_second_pos; //
        } else { //初回は探さないといけない
            first_pos  = findStrawberryDirectionW(h              , h_end, w_start, w_end - 1);
        }
        Pos second_pos = findStrawberryDirectionW(first_pos.h + 1, h_end, w_start, w_end - 1);
        // printf("first  : %d, %d\n", first_pos.h, first_pos.w);
        // printf("second : %d, %d\n", second_pos.h, second_pos.w);

        //2つ目のいちごの手前まで切る
        cut(h, second_pos.h - 1, w_start, w_end - 1, cake_number++);
        cut_section_h.push_back(make_pair(h, second_pos.h - 1)); //切った位置を覚えておく

        //切った次の行まで飛ぶ
        h = second_pos.h;
        prev_second_pos = second_pos;
    }
    // print();


    //縦に切る
    // printf("--- cut h --- \n");
    // printf("cut_pos_h.size() : %d\n", cut_section_h.size());
    for (int i = 0; i < (int)cut_section_h.size(); ++i)
    {
        //横方向にカットした範囲
        h_start = cut_section_h[i].first;
        h_end   = cut_section_h[i].second;
        // printf("start, end : %d, %d\n", h_start, h_end);

        //1つ目のいちご　と　2つ目のいちご　を見つける
        //  2つ目のいちごは必ず見つかる(w_endに番兵がいるので)
        //  縦方向に切るときはH方向の番兵は無視したいのでh_end-1までしか調べない
        int count = 0;
        for (int w = w_start; w < w_end; )
        {
            Pos first_pos;
            if(w > 0) { //初回以外は「1回前に調べた"2つ目"」が最初に出現するいちご
                first_pos = prev_second_pos; //
            } else { //初回は探さないといけない
                first_pos  = findStrawberryDirectionH(h_start, h_end, w              , w_end);
            }
            Pos second_pos = findStrawberryDirectionH(h_start, h_end, first_pos.w + 1, w_end);
            // printf("first  : %d, %d\n", first_pos.h , first_pos.w);
            // printf("second : %d, %d\n", second_pos.h, second_pos.w);

            //2つ目のいちごの手前まで切る
            //    2つ目以降のケーキに数値を振る(1つ目は横に切ったときの数値のままにするため)
            if(count++ > 0) { 
                cut(h_start, h_end, w, second_pos.w - 1, cake_number++);
            }
            //切った次の列まで飛ぶ
            w = second_pos.w;
            prev_second_pos = second_pos;

            // print();
        }
    }


}



int main() {
    cin >> H >> W >> K;

    // vector<char> tmp;
    for (int h = 0; h < H; ++h){
        vector<char> tmp;

        for (int w = 0; w < W; ++w)
        {
            char c;
            cin >> c;
            tmp.push_back(c); //ケーキ
        }
        tmp.push_back('#'); //番兵(W+1)
        s.push_back(tmp); //ケーキ

        //tmp.clear();
    }

    vector<char> tmp;
    for (int i = 0; i < W+1; ++i)
    {
        tmp.push_back('#');
    }
    s.push_back(tmp); //番兵(H+1)


    //答えの初期化
    for (int h = 0; h < H; ++h) {
        vector<int> tmp(W);
        fill(tmp.begin(), tmp.end(), 0);
        ans.push_back(tmp);
    }



    // printf("---- cake ----\n");
    // for (int i = 0; i < s.size(); ++i)
    // {
    //     for (int j = 0; j < W+1; ++j)
    //     {
    //         cout << s[i][j];
    //     }
    //     cout << endl;
    // }

    // printf("---- ans ----\n");
    // for (int i = 0; i < H; ++i)
    // {
    //     for (int j = 0; j < W; ++j)
    //     {
    //         cout << ans[i][j] << " ";
    //     }
    //     cout << endl;
    // }


    // printf("---- paint ----\n");
    // paint(0, W-1, 0, H-1);

    slove();
    // printf("---- print ----\n");
    print();

    

	return 0;
}

Measured memory_bytes: 1280