만드는 중입니다

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

문자열 곱

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

요약
문자열 s가 주어질 때 a와 b의 곱(글자를 26으로 나눈 덧셈)이 s가 되도록 하는 a, b를 찾고, a+b가 사전순으로 가장 작은 해를 구한다. 그런 해가 여러 개면 |a|가 최소인 것을 출력한다.
난이도

어려움10점 중 8점

유형
문자열, 수학, 정수론, 완전 탐색
정답자
아직 제출이 없습니다

문제

영소문자 cc의 00부터 시작하는 알파벳 번호를 f(c)f(c)라 하자. 즉 f(‘a‘)=0f(`a`) = 0, f(‘b‘)=1f(`b`) = 1, …\ldots, f(‘z‘)=25f(`z`) = 25이다. 두 문자열 s=s0…sn−1s = s_0 \ldots s_{n - 1}과 t=t0…tm−1t = t_0 \ldots t_{m - 1}의 곱 s×ts \times t는 문자열 u=u0…unm−1u = u_0 \ldots u_{nm - 1}이며, 모든 i=0,…,n−1i = 0, \ldots, n - 1과 j=0,…,m−1j = 0, \ldots, m - 1에 대해 f(uj⋅n+i)=(f(si)+f(tj)) mod 26f(u_{j \cdot n + i}) = (f(s_i) + f(t_j)) \bmod 26이다. 예를 들어 ‘abc‘בde‘=‘defefg‘`abc` \times `de` = `defefg`, ‘de‘בabc‘=‘deeffg‘`de` \times `abc` = `deeffg`, ‘xy‘בyz‘=‘vwwx‘`xy` \times `yz` = `vwwx`이다.

문자열 ss가 주어진다. a×b=sa \times b = s인 두 문자열 aa와 bb를 찾아라. 그러한 a,ba, b가 여러 쌍이면 문자열 a+ba + b (++는 연결을 뜻한다)가 사전순으로 가장 작은 쌍을 찾아라. 그러한 쌍이 여전히 여러 개라면 aa의 길이가 가장 작은 쌍을 찾아라.

입력

입력은 한 줄이며, 영소문자로 이루어진 문자열 ss가 주어진다 (1≤∣s∣≤1061 \le |s| \le 10^6).

출력

a×b=sa \times b = s인 두 문자열 a,ba, b를 찾을 수 없으면 −1-1을 출력한다. 그렇지 않으면 aa와 bb를 공백으로 구분해 출력한다. a+ba+b는 가능한 모든 쌍 (a,b)(a, b) 중 사전순으로 가장 작아야 한다. 그러한 쌍이 여러 개면 ∣a∣|a|가 가장 작아야 한다.

예제2

  1. 예제 1

    입력
    ddbb
    
    예상 출력
    aa db
    
  2. 예제 2

    입력
    eefbbcccdddeaabaab
    
    예상 출력
    aab ebcdaa