만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Prefix와 Suffix

시간 제한2초메모리 제한512 MB

요약
S의 접두사이면서 접미사인 각 문자열에 대해, 그 길이와 S에서 부분 문자열로 나타나는 횟수를 출력한다.
난이도

보통10점 중 7점

유형
문자열 매칭, 누적 합, 문자열
정답자
아직 제출이 없습니다

문제

문자열 S=S1S2…S∣S∣S = S_1 S_2 \dots S_{|S|}가 주어진다. ∣S∣|S|는 SS의 길이이고, SiS_i는 ii번째 글자다.

  • SS의 부분 문자열 S[i..j]S[i..j] (1≤i≤j≤∣S∣1 \le i \le j \le |S|)는 SiSi+1…SjS_i S_{i+1} \dots S_j다.
  • 길이가 ll (1≤l≤∣S∣1 \le l \le |S|)인 SS의 Prefix는 S[1..l]S[1..l]이다.
  • 길이가 ll (1≤l≤∣S∣1 \le l \le |S|)인 SS의 Suffix는 S[∣S∣−l+1..∣S∣]S[|S|-l+1..|S|]이다.

SS의 Prefix이면서 동시에 Suffix인 문자열을 모두 찾고, 각각이 SS의 부분 문자열로 몇 번 등장하는지 세는 프로그램을 작성하시오. 등장 위치는 서로 겹쳐도 된다.

입력

첫째 줄에 문자열 SS가 주어진다. (1≤∣S∣≤100 0001 \le |S| \le 100\,000)

출력

첫째 줄에 SS의 Prefix이면서 동시에 Suffix인 문자열의 개수 KK를 출력한다.

이어지는 KK개의 줄에는 lil_i와 cic_i를 공백으로 구분해 출력한다. 길이가 lil_i인 Prefix가 길이가 lil_i인 Suffix와 같고, 그 문자열이 SS의 부분 문자열로 cic_i번 등장한다는 뜻이다.

lil_i가 증가하는 순서로 출력한다.

예제8

  1. 예제 1

    입력
    ABACABA
    
    예상 출력
    3
    1 4
    3 2
    7 1
    
  2. 예제 2

    입력
    AAA
    
    예상 출력
    3
    1 3
    2 2
    3 1
    
  3. 예제 3

    입력
    A
    
    예상 출력
    1
    1 1
    
  4. 예제 4

    입력
    AB
    
    예상 출력
    1
    2 1
    
  5. 예제 5

    입력
    ABAB
    
    예상 출력
    2
    2 2
    4 1
    
  6. 예제 6

    입력
    AABAABAA
    
    예상 출력
    4
    1 6
    2 3
    5 2
    8 1
    
  7. 예제 7

    입력
    AAAAAAAAAA
    
    예상 출력
    10
    1 10
    2 9
    3 8
    4 7
    5 6
    6 5
    7 4
    8 3
    9 2
    10 1
    
  8. 예제 8

    입력
    ABCDEFG
    
    예상 출력
    1
    7 1