Decodificación del desplazamiento cíclico de una cadena con un patrón repetitivo

Kotlin Hard strings

Tarea «Decodificación del desplazamiento cíclico de una cadena con un patrón repetitivo»

Se da una cadena codificada, obtenida a partir de la cadena original mediante un desplazamiento cíclico a la izquierda de un cierto número K (0 ≤ K < longitud de la cadena) y la posterior sustitución de cada carácter por su código ASCII, escrito en el sistema decimal. La cadena original consta únicamente de letras latinas minúsculas (a-z) y tiene una longitud no mayor a 1000. Se sabe que la cadena original es el resultado de la repetición múltiple de algún patrón de longitud P (1 ≤ P ≤ longitud de la cadena) — es decir, la cadena tiene la forma S = T + T + ... + T (un número entero de veces). Es necesario encontrar la longitud del patrón mínimo posible P y restaurar la cadena original antes del desplazamiento cíclico. Si existen varias cadenas originales posibles, elegir aquella que sea lexicográficamente mínima (en su forma original, no desplazada). Datos de entrada: una cadena que contiene una secuencia de números enteros separados por espacios — esta es la cadena codificada. La longitud de la secuencia es L (1 ≤ L ≤ 2000). Datos de salida: dos números — la longitud del patrón mínimo P y el valor del desplazamiento K, y luego en la siguiente línea — la cadena original restaurada (antes del desplazamiento). Si la restauración no es posible, mostrar -1.

Formato de entrada

Una cadena que contiene números enteros separados por espacios — los códigos de los caracteres de la cadena codificada.

Formato de salida

En la primera línea dos números enteros: P y K. En la segunda línea — la cadena original antes del desplazamiento. Si no se encuentra una solución, mostrar -1.

Ejemplos

Ejemplo 1

ENTRADA
99 97 98 99 97 98
SALIDA
3 1 abcabc

Ejemplo 2

ENTRADA
97 98 97 98
SALIDA
2 0 abab
main.kt