output_description: On the first line, print the maximum value of the sum of the integers written
  on the chosen squares.
  
  On the next N lines, print a way that achieves the maximum.
  
  Precisely, output the strings t_1,t_2,\cdots,t_N, that satisfies t_{i,j}=`X`
  if you choose (i,j) and t_{i,j}=`.` otherwise.
  
  You may print any way to choose squares that maximizes the sum.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N K
      A_{1,1} A_{1,2} \cdots A_{1,N}
      A_{2,1} A_{2,2} \cdots A_{2,N}
      \vdots
      A_{N,1} A_{N,2} \cdots A_{N,N}
attempt: N, K = map(int, input().split())
  MAP = [list(map(int, input().split())) for i in range(N)]
  
  start = 2 * N + 1
  goal = 2 * N + 2
  V = 2 * N + 5
  
  EDGE = [[[0, 0] for j in range(V)] for i in range(V)]
  
  # 0 ～ N : 縦
  # N+1 ～　2*N : 横
  # 2*N+1 : start
  # 2*N+2 : goal
  
  
  for i in range(N):
      EDGE[start][i] = [K, 0]
      EDGE[N + i][goal] = [K, 0]
  
  for i in range(N):
      for j in range(N):
          EDGE[i][N + j] = [1, -MAP[i][j]]
          EDGE[N + j][i] = [0, MAP[i][j]]
  
  EDGE[start][goal] = [float("inf"), 0]
  
  
  BACK = [-1] * V
  LA = 0
  
  for flow in range(K * N):
      ANS = [float("inf")] * V
      ANS[start] = 0
  
      for rep in range(V):
          flag = 0
          for fr in range(V):
              for to in range(V):
                  c, d = EDGE[fr][to]
                  if c > 0 and ANS[to] > ANS[fr] + d:
                      ANS[to] = ANS[fr] + d
                      flag = 1
                      BACK[to] = fr
          if flag == 0:
              break
  
      if ANS[goal] == 0:
          break
  
      LA += ANS[goal]
  
      NOW = goal
      while NOW != start:
          fr = BACK[NOW]
          EDGE[fr][NOW][0] -= 1
          EDGE[NOW][fr][0] += 1
  
          NOW = fr
  
  print(-LA)
  ALIST = [["."] * N for i in range(N)]
  
  for i in range(N):
      for j in range(N):
          if EDGE[i][N + j][0] == 0:
              ALIST[i][j] = "X"
  
  for alist in ALIST:
      print("".join(alist))
  
problem_description: Statement
  
  You are given a grid of N rows and M columns. The square at the i-th row and
  j-th column will be denoted as (i,j). A nonnegative integer A_{i,j} is written
  for each square (i,j).
  
  You choose some of the squares so that each row and column contains at most K
  chosen squares. Under this constraint, calculate the maximum value of the sum
  of the integers written on the chosen squares. Additionally, calculate a way
  to choose squares that acheives the maximum.
samples: [{"input": "3 1\n    5 3 2\n    1 4 8\n    7 6 9", "output": "19\n    X..\n    ..X\n    .X.\n    \n\n* * *"}, {"input": "3 2\n    10 10 1\n    10 10 1\n    1 1 10", "output": "50\n    XX.\n    XX.\n    ..X"}]