Décodage du décalage cyclique d'une chaîne avec un motif répété

Kotlin Hard strings

Tâche «Décodage du décalage cyclique d'une chaîne avec un motif répété»

Soit une chaîne encodée obtenue à partir de la chaîne originale par un décalage cyclique vers la gauche d'un certain nombre K (0 ≤ K < longueur de la chaîne), puis par le remplacement de chaque caractère par son code ASCII écrit en système décimal. La chaîne originale est composée uniquement de lettres latines minuscules (a-z) et a une longueur maximale de 1000. On sait que la chaîne originale est le résultat de la répétition multiple d'un motif (pattern) de longueur P (1 ≤ P ≤ longueur de la chaîne) — c'est-à-dire que la chaîne a la forme S = T + T + ... + T (un nombre entier de fois). Il faut trouver la longueur minimale possible du motif P et reconstituer la chaîne originale avant le décalage cyclique. Si plusieurs chaînes originales sont possibles, choisir celle qui est lexicographiquement minimale (dans sa forme originale, non décalée). Données d'entrée : une seule chaîne contenant une séquence de nombres entiers séparés par des espaces — c'est la chaîne encodée. La longueur de la séquence est L (1 ≤ L ≤ 2000). Données de sortie : deux nombres — la longueur minimale du motif P et la valeur du décalage K, puis sur la ligne suivante — la chaîne originale reconstituée (avant le décalage). Si la reconstitution est impossible, afficher -1.

Format d\ entrée

Une seule chaîne contenant des nombres entiers séparés par des espaces — les codes des caractères de la chaîne encodée.

Format de sortie

Sur la première ligne, deux nombres entiers : P et K. Sur la deuxième ligne — la chaîne originale avant le décalage. Si aucune solution n'est trouvée, afficher -1.

Exemples

Exemple 1

ENTRÉE
99 97 98 99 97 98
SORTIE
3 1 abcabc

Exemple 2

ENTRÉE
97 98 97 98
SORTIE
2 0 abab
main.kt