Циклический сдвиг и поиск повторяющихся подстрок

C# Сложный loops

Задача «Циклический сдвиг и поиск повторяющихся подстрок»

Дана строка S, состоящая из строчных латинских букв. Необходимо выполнить циклический сдвиг строки влево на K позиций (K может быть больше длины строки). После сдвига найти все непересекающиеся повторяющиеся подстроки длины L (L задаётся) в новой строке. Повторяющаяся подстрока — это подстрока, которая встречается в строке два и более раза, причём её вхождения не должны пересекаться. Вывести количество таких подстрок и сами подстроки в лексикографическом порядке. Если таких подстрок нет, вывести 0.

Формат ввода

В первой строке целое число N (1 ≤ N ≤ 1000) — длина строки. Во второй строке сама строка S. В третьей строке целое число K (0 ≤ K ≤ 10^9) — количество сдвигов. В четвёртой строке целое число L (1 ≤ L ≤ N) — длина подстроки.

Формат вывода

В первой строке выведите целое число M — количество уникальных повторяющихся непересекающихся подстрок длины L. Если M > 0, в следующих M строках выведите сами подстроки в лексикографическом порядке.

Примеры

Пример 1

ВВОД
5 abcde 3 2
ВЫВОД
0

Пример 2

ВВОД
10 abracadabra 5 4
ВЫВОД
1 abra
main.cs