Циклический сдвиг и поиск повторяющихся подстрок
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