P16147 [ICPC 2017 NAIPC] Incremental Double Free Strings

题目描述

如果一个字符串中没有两个相邻的字母相同,则称该字符串是 **双自由** 的。 如果一个字符串满足:对于区间 $[1, k]$ 内的每个 $j$,恰好存在一个字符出现了 $j$ 次,并且字符串的长度为 $1 + 2 + 3 + \ldots + (k - 1) + k$,则称该字符串是 **$k$-增量** 的。例如,当 $k = 3$ 时,一个 **3-增量** 字符串应有一个字符出现一次,另一个字符出现两次,另一个字符出现三次(顺序任意),总长度为 $6$。 如果一个字符串同时满足 **$k$-增量** 和 **双自由** 的条件,则称其满足两个条件。现在考虑按字母顺序排列所有由小写字母组成的、对于给定 $k$ 满足上述条件的字符串。例如: $k = 2$: aba, aca, ada, $\ldots$, aya, aza, bab, bcb, bdb, $\ldots$, zxz, zyz $k = 3$: ababac, ababad, $\ldots$, ababay, ababaz, ababca, $\ldots$, zyzyzx 在所有满足 **$k$-增量** 且 **双自由** 的字符串的字母序列表中,第 $n$ 个字符串是什么?

输入格式

每个输入包含单个测试用例。请注意,你的程序可能会在不同输入上多次运行。输入只有一行,包含两个整数 $k$ 和 $n$($1 \leq k \leq 26$,$1 \leq n \leq 10^{18}$),表示要求的是字母序列表中第 $n$ 个满足条件的字符串。

输出格式

输出字母序列表中第 $n$ 个 **$k$-增量** 且 **双自由** 的字符串。如果不存在这样的字符串,则输出 $-1$。

说明/提示

翻译由 DeepSeek V3.2 完成