Решение
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.LinkedList
import java.util.Queue
fun main() {
val reader = BufferedReader(InputStreamReader(System.`in`))
val writer = BufferedWriter(OutputStreamWriter(System.out))
val n = reader.readLine().trim().toInt()
val adjMatrix = Array(n) {
reader.readLine().trim().split(" ").map { it.toInt() }.toIntArray()
}
val (start, end) = reader.readLine().trim().split(" ").map { it.toInt() - 1 }
if (start == end) {
writer.write("0\\n")
writer.flush()
return
}
val visited = BooleanArray(n)
val prev = IntArray(n) { -1 }
val queue: Queue<Int> = LinkedList()
visited[start] = true
queue.add(start)
var found = false
while (queue.isNotEmpty()) {
val current = queue.poll()
if (current == end) {
found = true
break
}
for (neighbor in 0 until n) {
if (adjMatrix[current][neighbor] == 1 && !visited[neighbor]) {
visited[neighbor] = true
prev[neighbor] = current
queue.add(neighbor)
}
}
}
if (!found) {
writer.write("-1\\n")
} else {
val path = mutableListOf<Int>()
var current = end
while (current != -1) {
path.add(current + 1)
current = prev[current]
}
path.reverse()
writer.write("${path.size - 1}\\n")
writer.write(path.joinToString(" ") + "\\n")
}
writer.flush()
writer.close()
}