Решение
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun main(args: Array<String>) {
val reader = BufferedReader(InputStreamReader(System.`in`))
val writer = BufferedWriter(OutputStreamWriter(System.out))
// Читаем количество соперников
val n = reader.readLine().toInt()
// Читаем уровни соперников
val a = reader.readLine().split(" ").map { it.toInt() }
// Сортируем соперников по возрастанию уровня и сохраняем индексы
val indexed = a.withIndex().sortedBy { it.value }
// Симулируем игру
var playerLevel = 1 // Начальный уровень игрока
var penaltyPoints = 0 // Штрафные очки
for ((index, rivalLevel) in indexed) {
if (playerLevel < rivalLevel) {
// Игрок проигрывает, если его уровень меньше уровня соперника
writer.write("Impossible")
reader.close()
writer.close()
return
}
// Победа: уровень игрока увеличивается
playerLevel++
// Проверяем штрафные очки
if (playerLevel <= rivalLevel * 2) {
penaltyPoints++
if (penaltyPoints == 3) {
playerLevel-- // Теряем уровень
penaltyPoints = 0 // Сбрасываем очки
}
}
}
// Если дошли сюда, игра проходима
writer.write("Possible")
writer.newLine()
// Выводим порядок соперников (индексы + 1, так как в выводе от 1 до n)
writer.write(indexed.joinToString(" ") { (it.index + 1).toString() })
reader.close()
writer.close()
}