Решение
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun main() {
val reader = BufferedReader(InputStreamReader(System.`in`))
val writer = BufferedWriter(OutputStreamWriter(System.out))
// Читаем размер матрицы
val n = reader.readLine().toInt()
// Читаем матрицу-шаблон
val matrix = Array(n) { IntArray(n) }
for (i in 0 until n) {
val row = reader.readLine().split(" ").map { it.toInt() }
for (j in 0 until n) {
matrix[i][j] = row[j]
}
}
// Собираем все ненулевые значения (помеченные ячейки)
val usedNumbers = mutableSetOf<Int>()
for (i in 0 until n) {
for (j in 0 until n) {
if (matrix[i][j] != 0) {
usedNumbers.add(matrix[i][j])
}
}
}
// Формируем список всех чисел от 1 до n^2, которые еще не использованы
val remainingNumbers = mutableListOf<Int>()
for (num in 1..n * n) {
if (num !in usedNumbers) {
remainingNumbers.add(num)
}
}
// Заполняем матрицу: оставляем помеченные ячейки, заполняем нули оставшимися числами
var index = 0
val result = Array(n) { IntArray(n) }
for (i in 0 until n) {
for (j in 0 until n) {
if (matrix[i][j] != 0) {
result[i][j] = matrix[i][j]
} else {
result[i][j] = remainingNumbers[index]
index++
}
}
}
// Выводим результат
for (i in 0 until n) {
writer.write(result[i].joinToString(" "))
writer.newLine()
}
reader.close()
writer.close()
}