Zyklische Verschiebung und Suche nach sich wiederholenden Teilstrings

C# Hard loops

Aufgabe «Zyklische Verschiebung und Suche nach sich wiederholenden Teilstrings»

Gegeben ist eine Zeichenkette S, die aus Kleinbuchstaben des lateinischen Alphabets besteht. Es ist eine zyklische Verschiebung der Zeichenkette um K Positionen nach links durchzuführen (K kann größer als die Länge der Zeichenkette sein). Nach der Verschiebung sind alle sich nicht überschneidenden, wiederholenden Teilstrings der Länge L (L ist vorgegeben) in der neuen Zeichenkette zu finden. Ein sich wiederholender Teilstring ist ein Teilstring, der in der Zeichenkette zwei- oder mehrmals vorkommt, wobei sich seine Vorkommen nicht überschneiden dürfen. Geben Sie die Anzahl solcher Teilstrings und die Teilstrings selbst in lexikografischer Reihenfolge aus. Wenn es keine solchen Teilstrings gibt, geben Sie 0 aus.

Eingabeformat

In der ersten Zeile eine ganze Zahl N (1 ≤ N ≤ 1000) — die Länge der Zeichenkette. In der zweiten Zeile die Zeichenkette S selbst. In der dritten Zeile eine ganze Zahl K (0 ≤ K ≤ 10^9) — die Anzahl der Verschiebungen. In der vierten Zeile eine ganze Zahl L (1 ≤ L ≤ N) — die Länge des Teilstrings.

Ausgabeformat

Geben Sie in der ersten Zeile eine ganze Zahl M aus — die Anzahl der eindeutigen, sich wiederholenden, sich nicht überschneidenden Teilstrings der Länge L. Wenn M > 0, geben Sie in den folgenden M Zeilen die Teilstrings selbst in lexikografischer Reihenfolge aus.

Beispiele

Beispiel 1

EINGABE
5 abcde 3 2
AUSGABE
0

Beispiel 2

EINGABE
10 abracadabra 5 4
AUSGABE
1 abra
main.cs