CF1975H 378QAQ and Core

题目描述

378QAQ 有一个长度为 $n$ 的字符串 $s$。定义一个字符串的“核心”为其字典序最大的子串$^\dagger$。 例如,"bazoka" 的核心是 "zoka","aaa" 的核心是 "aaa"。 378QAQ 想要重新排列字符串 $s$,使得其核心的字典序最小。请你找出所有 $s$ 的重排中,核心字典序最小的方案。 $^\dagger$ 字符串 $s$ 的子串是 $s$ 中一段连续的字母。例如,"defor"、"code" 和 "o" 都是 "codeforces" 的子串,而 "codes" 和 "aaa" 不是。 $^\ddagger$ 如果字符串 $p$ 满足以下任一条件,则称 $p$ 的字典序小于 $q$: - $p$ 是 $q$ 的前缀,且 $p \ne q$; - 在 $p$ 和 $q$ 第一个不同的位置,$p$ 的该字符的 ASCII 码小于 $q$ 的对应字符。 例如,"code" 和 "coda" 的字典序都小于 "codeforces",而 "codeforceston" 和 "z" 则不是。

输入格式

每个测试包含多组测试数据。第一行包含测试用例数 $t$($1\leq t\leq 10^5$)。接下来是每组测试数据的描述。 每组测试数据的第一行包含一个整数 $n$($1\leq n\leq 10^6$),表示字符串 $s$ 的长度。 接下来一行包含一个长度为 $n$ 的字符串 $s$,仅包含小写英文字母。 保证所有测试用例中 $n$ 的总和不超过 $10^6$。

输出格式

对于每组测试数据,输出所有重排方案中核心字典序最小的结果。

说明/提示

在第一个测试用例中,所有可能的重排及其对应的核心如下: - "qaq",其核心为 "qaq"。 - "aqq",其核心为 "qq"。 - "qqa",其核心为 "qqa"。 因此,所有重排方案中核心字典序最小的是 "qaq"。 由 ChatGPT 4.1 翻译