using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AtCoder2 {
	class Program {
		static void Main(string[] args) {

			//出力の都度更新をやめる
			var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
			Console.SetOut(sw);


			Ans();

			//更新する
			Console.Out.Flush();
			
		}
 public static void Ans() {

			var inputArray = retreiveLongArray();
			var inputCount = 3;

			// 不正な入力は処理しない
			if (inputArray.Length != inputCount) {
				Console.WriteLine("invalid input");
				return;
			}
			var H = (int)inputArray[0];
			var W = (int)inputArray[1];
			long K = inputArray[2];

			var map = new int[H, W];

			//イチゴがひとつしかないとき
			if (K==1) {
				//答えの出力
				for (int i = 0; i < H; i++) {
					var output = new List<int>();
					for (int j = 0; j < W; j++) {
						output.Add(1);
					}
					Console.WriteLine(string.Join(" ", output));
				}
				return;
			}



			for (int i = 0; i < H; i++) {
				var inp = retreiveStringArray()[0];
				for (int j = 0; j < W; j++) {
					map[i, j] = inp[j] == '#' ? 1 : 0;
				}
			}

			_count = 1;
			_map = map;
			_resultmap = new int[H, W];
			cutCake(0, 0, H - 1, W - 1);

			//答えの出力
			for (int i = 0; i < H; i++) {
				var output = new List<int>();
				for (int j = 0; j < W; j++) {
					output.Add(_resultmap[i,j]);
				}
				Console.WriteLine(string.Join(" ", output)); 
			}
	

		}


		private static void cutCake(int fromI,int fromJ,int endI,int endJ) {
			//イチゴが一個以上乗るような切り方を求める

			for (int i = fromI; i < endI; i++) {
				var pre = countBerry(fromI, fromJ, i, endJ);
				var post = countBerry(i+1, fromJ, endI, endJ);

				if (pre>0 && post >0) {

					if (pre==1) {//切った後の一語の個数が1つだけの場合、そのエリアにカウントを入力してカウントを上げる
						decideBerry(fromI, fromJ, i, endJ);
					}
					else {//切った後のイチゴの個数が2つ以上の場合、再度この関数を呼び出す
						cutCake(fromI, fromJ, i, endJ);
					}

					if (post==1) {
						decideBerry(i+1, fromJ, endI, endJ);
					}
					else {
						cutCake(i+1, fromJ, endI, endJ);
					}

					return;
				}
				
			}

			//縦には切れない場合

			for (int j = fromJ; j < endJ; j++) {
				var pre = countBerry(fromI, fromJ, endI, j);
				var post = countBerry(fromI, j+1, endI, endJ);

				if (pre > 0 && post > 0) {

					if (pre == 1) {//切った後の一語の個数が1つだけの場合、そのエリアにカウントを入力してカウントを上げる
						decideBerry(fromI, fromJ, endI, j);
					}
					else {//切った後のイチゴの個数が2つ以上の場合、再度この関数を呼び出す
						cutCake(fromI, fromJ, endI, j);
					}

					if (post == 1) {
						decideBerry(fromI, j + 1, endI, endJ);
					}
					else {
						cutCake(fromI, j + 1, endI, endJ);
					}

					return;
				}

			}







		}

		/// <summary>
		/// 指定されたエリアのケーキを数える
		/// </summary>
		/// <param name="fromI"></param>
		/// <param name="fromJ"></param>
		/// <param name="endI"></param>
		/// <param name="endJ"></param>
		/// <returns></returns>
		private static int countBerry(int fromI, int fromJ, int endI, int endJ) {
			var count = 0;
			for (int i = fromI; i <= endI; i++) {
				for (int j = fromJ; j <= endJ; j++) {
					count += _map[i, j];
				}
			}
			return count;
		}

		//1つの一語しか載っていないケーキに番号を振る
		private static void decideBerry(int fromI, int fromJ, int endI, int endJ) {
			for (int i = fromI; i <= endI; i++) {
				for (int j = fromJ; j <= endJ; j++) {
					_resultmap[i, j] = _count;
				}
			}
			_count++;
			return;
		}

		private static int _count;
		private static int[,] _map;
		private static int[,] _resultmap;



		/// <summary>
		/// スペースで区切られた文字列配列の入力を受け取る
		/// </summary>
		/// <returns></returns>
		private static string[] retreiveStringArray() {
			var inputArray = Console.ReadLine().Split(' ');
			return inputArray;
		}

		/// <summary>
		/// スペースで区切られた整数配列の入力を受け取る
		/// </summary>
		/// <returns></returns>
		private static long[] retreiveLongArray() {
			var inputArray = Console.ReadLine().Split(' ');
			var longArray = inputArray.Select(s => long.Parse(s));
			return longArray.ToArray();
		}


		/// <summary>
		/// 2組みずつの入力データ(数値)からTuppleListを作成する
		/// </summary>
		/// <param name="N"></param>
		/// <returns></returns>
		private static List<Tuple<long, long>> createLongTuppleList(long N) {
			var inpList = new List<Tuple<long, long>>();

			for (int i = 0; i < N; i++) {
				var inp = retreiveLongArray();
				var item1 = inp[0];
				var item2 = inp[1];
				inpList.Add(new Tuple<long, long>(item1, item2));
			}
			return inpList;
		}
	}
}


Measured memory_bytes: 35744