만드는 중입니다

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

앨리스와 밥 (그리고 문자열): Double Menace

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

요약
문자열 s와 정수 k가 주어질 때, Alice가 이기는 초기 문자열 t 중 사전순으로 k번째인 것을 구합니다.
난이도

어려움10점 중 9점

유형
게임 이론, 문자열 매칭, 문자열
정답자
아직 제출이 없습니다

문제

앨리스와 밥이 게임을 한다. 처음에 문자열 ss와 ss의 부분 문자열 tt가 주어진다. 각 차례에 플레이어는 임의의 소문자 clc_l을 tt의 왼쪽에, 임의의 소문자 crc_r을 tt의 오른쪽에 붙인다. 이때 tt가 여전히 ss의 부분 문자열이어야 한다. 유효한 수를 둘 수 없는 플레이어가 진다. 앨리스가 먼저 둔다.

앨리스는 첫 수를 두기 전에 초기 문자열 tt를 고를 수 있다. 두 플레이어가 최선을 다한다고 가정할 때 앨리스가 이기는 것이 보장되는 tt를 고르려 한다. 밥이 눈치채지 않도록, 이기는 초기 문자열 중 사전순으로 kk번째로 작은 문자열을 고른다. 앨리스를 도와라.

입력

첫 줄에 소문자 영어 알파벳으로 이루어진 문자열 ss가 주어진다 (1≤∣s∣≤1051 \leq |s| \leq 10^5).

둘째 줄에 정수 kk가 주어진다 (1≤k≤10101 \leq k \leq 10^{10}).

출력

이기는 초기 문자열이 kk개보다 적으면 "no solution"을 출력한다. 그렇지 않으면 사전순으로 kk번째인 이기는 초기 문자열을 출력한다. 그 문자열이 빈 문자열이면 "-"를 출력한다.

힌트

s=abacs=\mathtt{abac}일 때 이기는 문자열은 -, a, b, ba이다.

예제3

  1. 예제 1

    입력
    abac
    3
    
    예상 출력
    b
    
  2. 예제 2

    입력
    rndstr
    1
    
    예상 출력
    -
    
  3. 예제 3

    입력
    abc
    10
    
    예상 출력
    no solution