Decodificação de deslocamento cíclico de string com padrão repetitivo
Kotlin
Hard
strings
Tarefa «Decodificação de deslocamento cíclico de string com padrão repetitivo»
Dada uma string codificada, obtida a partir da string original por meio de um deslocamento cíclico à esquerda por um número K (0 ≤ K < comprimento da string) e subsequente substituição de cada caractere pelo seu código ASCII, escrito no sistema decimal. A string original consiste apenas em letras latinas minúsculas (a-z) e tem comprimento máximo de 1000. Sabe-se que a string original é resultado da repetição múltipla de algum padrão de comprimento P (1 ≤ P ≤ comprimento da string) — ou seja, a string tem a forma S = T + T + ... + T (um número inteiro de vezes). É necessário encontrar o comprimento do menor padrão possível P e recuperar a string original antes do deslocamento cíclico. Se existirem várias strings originais possíveis, escolher aquela que é lexicograficamente mínima (na forma original, não deslocada). Dados de entrada: uma única string contendo uma sequência de números inteiros separados por espaços — esta é a string codificada. O comprimento da sequência é L (1 ≤ L ≤ 2000). Dados de saída: dois números — o comprimento do menor padrão P e o valor do deslocamento K, e em seguida, na próxima linha, a string original recuperada (antes do deslocamento). Se a recuperação for impossível, imprimir -1.
Formato de Entrada
Uma única string contendo números inteiros separados por espaços — os códigos dos caracteres da string codificada.
Formato de Saída
Na primeira linha, dois números inteiros: P e K. Na segunda linha — a string original antes do deslocamento. Se nenhuma solução for encontrada, imprimir -1.
Exemplos
Exemplo 1
ENTRADA
99 97 98 99 97 98
SAÍDA
3 1
abcabc
Exemplo 2
ENTRADA
97 98 97 98
SAÍDA
2 0
abab
main.kt