만드는 중입니다

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

암호화된 메시지

시간 제한1초메모리 제한1024 MB

요약
문자열 t를 단어들로 나누되, 앞부분은 w1부터 wn까지, 뒷부분은 wn부터 w1까지 이어지도록 나눕니다. 단어 수가 최대가 되도록 단어들을 출력합니다.
난이도

어려움10점 중 8점

유형
문자열 매칭, 동적 계획법, 문자열
정답자
아직 제출이 없습니다

문제

수사 중 베누아 블랑은 범행 현장에 누군가 남긴 의심스러운 쪽지를 발견했다. 쪽지의 텍스트 tt는 얼핏 보면 아무 의미가 없었지만, 오랜 분석 끝에 블랑은 이것이 의미가 있는 메시지이며 암호화되어 있다고 결론 내렸다.

쪽지에 쓰인 암호는 꽤 특이하다. 각 단어를 따로 암호화한 뒤 모든 단어를 이어 붙였기 때문에, 어디서부터 어디까지가 한 단어인지 알 수 없다. 그래서 탐정은 먼저 단어의 경계를 복원하고, 그다음에 단어를 해독하기로 했다.

쪽지의 텍스트는 다음과 같이 만들어졌다. 암호화된 단어의 집합 w1,w2,…,wnw_1, w_2, \ldots, w_n을 역순으로 한 번 더 나열한 뒤, 공백 없이 모두 적었다. 즉 t=(w1+…+wn)+(wn+…+w1)t = (w_1 + \ldots + w_n) + (w_n + \ldots + w_1)이며, '+'는 연결을 뜻한다.

베누아 블랑이 원래의 암호화된 단어 집합을 복원하도록 도와라. 블랑은 메시지에 단어가 많이 들어 있다고 믿으므로, 조건을 만족하는 tt의 모든 분할 방법 가운데 단어 수가 최대인 것을 골라라.

입력

소문자 라틴 문자로 이루어진 문자열 tt가 한 줄로 주어진다. 이는 암호화된 텍스트이다 (1≤∣t∣≤1061 \leq |t| \leq 10^6).

출력

첫째 줄에 암호화된 텍스트에 가능한 단어의 최대 개수 nn을 출력하라. 이어서 nn개의 줄에 단어를 한 줄에 하나씩 출력하라.

최대 nn을 갖는 답이 여러 개라면 그중 아무것이나 출력해도 된다.

답이 존재함이 보장된다.

예제3

  1. 예제 1

    입력
    abaccaba
    
    예상 출력
    4
    a
    b
    a
    c
    
  2. 예제 2

    입력
    guesswhoitisisitwhoguess
    
    예상 출력
    4
    guess
    who
    it
    is
    
  3. 예제 3

    입력
    xaabaababaaabxaa
    
    예상 출력
    5
    xaa
    b
    a
    a
    ba