아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

재귀 문자열

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

요약
문자를 이전 블록 양옆에 반복해 끼워 넣는 규칙으로 만들어진 문자열 T에서 원래 문자열 S와 반복 횟수 A를 복원한다.
난이도

어려움10점 중 9점

유형
문자열, 재귀, 분할 정복, 구현
정답자
아직 제출이 없습니다

문제

길이가 nn인 문자열 S=s1s2⋯snS=s_1s_2\cdots s_n와 길이가 nn인 양의 정수 수열 A=(a1,a2,⋯ ,an)A=(a_1, a_2, \cdots, a_n)로 다음과 같이 새 문자열 TT를 만들 수 있다.

  • X0X_0는 빈 문자열이다.
  • Xi=Xi−1siXi−1si⋯siXi−1X_i = X_{i-1} s_i X_{i-1} s_i \cdots s_i X_{i-1}이며, sis_i는 aia_i번, Xi−1X_{i-1}은 ai+1a_i + 1번 나타난다.
  • T=XnT = X_n이다.

예를 들어 S=abcS=abc이고 A=(1,2,1)A=(1,2,1)이면 X1=aX_1=a, X2=ababaX_2=ababa, X3=T=ababacababaX_3=T=ababacababa가 된다.

SS와 AA로 TT를 만드는 것은 쉽다. 반대로 TT가 주어졌을 때 TT를 만들어내는 SS와 AA를 찾아보자.

입력

문자열 TT가 주어진다.

출력

첫 번째 줄에 SS를 출력한다.

두 번째 줄에 AA를 공백으로 구분하여 출력한다.

정답이 여러 개라면 아무거나 한 가지를 출력한다.

제한

  • TT의 길이는 1 이상 220=1 048 5762^{20} = 1\,048\,576 미만이고, 알파벳 소문자로만 구성된다.
  • 조건을 만족하는 SS와 AA가 존재하는 입력만 주어진다.

예제2

  1. 예제 1

    입력
    ababacababa
    
    예상 출력
    abc
    1 2 1
    
  2. 예제 2

    입력
    ccccccc
    
    예상 출력
    c
    7