Pavel loves grid mazes. A grid maze is an *n* × *m* rectangle maze where each cell is either empty, or is a wall. You can go from one cell to another only if both cells are empty and have a common side.

Pavel drew a grid maze with all empty cells forming a connected area. That is, you can go from any empty cell to any other one. Pavel doesn't like it when his maze has too little walls. He wants to turn exactly *k* empty cells into walls so that all the remaining cells still formed a connected area. Help him.
The first line contains three integers *n*, *m*, *k* (1 ≤ *n*, *m* ≤ 500, 0 ≤ *k* &lt; *s*), where *n* and *m* are the maze's height and width, correspondingly, *k* is the number of walls Pavel wants to add and letter *s* represents the number of empty cells in the original maze.

Each of the next *n* lines contains *m* characters. They describe the original maze. If a character on a line equals ".", then the corresponding cell is empty and if the character equals "#", then the cell is a wall.
#: Author - Soumya Saurav
import sys,io,os,time
from collections import defaultdict
from collections import Counter
from collections import deque
from itertools import combinations
from itertools import permutations
import bisect,math,heapq
alphabet = "abcdefghijklmnopqrstuvwxyz"

input = sys.stdin.readline

########################################

n , m , k = map(int , input().split())

arr = []
empty = []

for i in range(n):

    temp = list(input())[:-1]
    arr.append(temp)

    for j in range(len(temp)):
        if temp[j] == ".":
            empty.append([i,j])
notpossible = []

while k:

    # we block the current cell
    # and try to reach other empty cells

    xi, yi = empty.pop()
    #print("checking : ",xi,yi, notpossible, k)
    arr[xi][yi] = "X"
    if empty: q = deque([empty[0]])
    else: q = deque([notpossible[0]])
    visited = [[False]*m for i in range(n)]
    while q:
        curx , cury = q.popleft()
        visited[curx][cury] = True
        for dx, dy in [[1,0], [0,1], [-1,0], [0,-1]]:
            x = dx + curx
            y = dy + cury
            if not(0 <= x <= n-1) or not(0 <= y <= m-1):
                continue
            if not visited[x][y] and arr[x][y] == ".":
                q.append([x,y])
    #for ele in visited:
    #    print(*ele)
    ok = True
    for i , j in empty:
        if not visited[i][j]:
            ok = False
            break

    for i , j in notpossible:
        if not visited[i][j]:
            ok = False
            break

    if ok:
        k -= 1
        continue
    else:
        arr[xi][yi] = "."
        notpossible.append([xi, yi])
        continue


for i in range(n):
    print("".join(arr[i]))




'''
# Wrap solution for more recursion depth
#submit as python3
import collections,sys,threading
sys.setrecursionlimit(10**9)
threading.stack_size(10**8)



threading.Thread(target=solve).start()
'''
