증가하며 중복 없는 문자열

각 j에 대해 j번 나타나는 문자가 하나씩 있고 인접한 두 문자가 다르며 길이가 k(k+1)/2인 문자열을 사전순으로 나열할 때 n번째 문자열을 구한다.

어려움9조합론동적 계획법그리디문자열 매칭아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

소문자 알파벳으로 이루어진 문자열에서 이웃한 두 문자가 같은 자리가 하나도 없으면 그 문자열을 중복 없는 문자열이라고 한다.

1 이상 k 이하인 모든 j에 대해 정확히 j번 등장하는 문자가 하나씩 있고 문자열의 길이가 1+2+3++(k1)+k1+2+3+\cdots+(k-1)+k이면 그 문자열을 k-증가 문자열이라고 한다. 예를 들어 k = 3이면 3-증가 문자열에는 한 번 등장하는 문자, 두 번 등장하는 문자, 세 번 등장하는 문자가 순서에 관계없이 하나씩 있고 전체 길이는 6이다.

두 조건을 모두 만족하는 문자열이 k-증가이면서 중복 없는 문자열이다. k를 하나 고정하고 그런 문자열을 모두 사전순으로 늘어놓는다고 하자. 두 가지 예는 다음과 같다.

k = 2: aba, aca, ada, ..., aya, aza, bab, bcb, bdb, ..., zxz, zyz

k = 3: ababac, ababad, ..., ababay, ababaz, ababca, ..., zyzyzx

k-증가이면서 중복 없는 문자열을 사전순으로 정렬한 목록에서 n번째 문자열은 무엇인가?

입력

입력은 테스트 케이스 한 개로 이루어진다. 이 프로그램은 서로 다른 입력으로 여러 번 실행될 수 있다. 입력은 한 줄이고 두 정수 k와 n이 주어진다 (1k261 \le k \le 26, 1n10181 \le n \le 10^{18}). k-증가이면서 중복 없는 문자열을 사전순으로 정렬한 목록에서 n번째 문자열을 구하라는 뜻이다.

출력

사전순으로 정렬한 목록에서 n번째 k-증가 중복 없는 문자열을 출력한다. 그런 문자열이 없으면 -1을 출력한다.