Deslocamento cíclico e busca de substrings repetidas

C# Hard loops

Tarefa «Deslocamento cíclico e busca de substrings repetidas»

Dada uma string S, composta por letras minúsculas do alfabeto latino. É necessário realizar um deslocamento cíclico da string para a esquerda em K posições (K pode ser maior que o comprimento da string). Após o deslocamento, encontrar todas as substrings repetidas não sobrepostas de comprimento L (L é fornecido) na nova string. Uma substring repetida é uma substring que ocorre duas ou mais vezes na string, e suas ocorrências não devem se sobrepor. Exibir a quantidade de tais substrings e as próprias substrings em ordem lexicográfica. Se não houver tais substrings, exibir 0.

Formato de Entrada

Na primeira linha, um número inteiro N (1 ≤ N ≤ 1000) — comprimento da string. Na segunda linha, a própria string S. Na terceira linha, um número inteiro K (0 ≤ K ≤ 10^9) — quantidade de deslocamentos. Na quarta linha, um número inteiro L (1 ≤ L ≤ N) — comprimento da substring.

Formato de Saída

Na primeira linha, exiba um número inteiro M — a quantidade de substrings repetidas não sobrepostas únicas de comprimento L. Se M > 0, nas próximas M linhas, exiba as próprias substrings em ordem lexicográfica.

Exemplos

Exemplo 1

ENTRADA
5 abcde 3 2
SAÍDA
0

Exemplo 2

ENTRADA
10 abracadabra 5 4
SAÍDA
1 abra
main.cs