https://coderun.yandex.ru/problem/lzw-mob/description?compiler=kotlin Легкая

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter

fun compressString(s: String): List<String> {
    val blocks = mutableListOf<String>()
    val seen = mutableSetOf<String>()

    var i = 0
    while (i < s.length) {
        var prefix = s[i].toString()
        while (i + prefix.length < s.length && prefix in seen) {
            prefix += s[i + prefix.length]
        }
        blocks.add(prefix)
        seen.add(prefix)
        i += prefix.length
    }
    return blocks
}

fun main() {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))

    val s = reader.readLine()  // Читаем входную строку
    val result = compressString(s)  // Получаем блоки

    writer.write(result.joinToString(" "))  // Выводим результат
    writer.newLine()

    writer.flush()
    reader.close()
    writer.close()
}