https://coderun.yandex.ru/problem/names-and-surnames/description Легкая

Решение

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()
}