CF1316B String Modification
题目描述
Vasya 有一个长度为 $n$ 的字符串 $s$。他想要对它进行以下的修改:
1. 选择一个整数 $k$ 且 $1\leq k\leq n$。
2. 让 $i$ 从 $1$ 循环到 $n - k + 1$,每一次反转 $s$ 在 $[i,i + k - 1]$ 范围中的子串。
比如说,字符串 $s$ 是 $\texttt{qwer}$ 且 $k = 2$,以下就是 $s$ 被修改的过程:
- $\texttt{qwer}$(原字符串)
- $\texttt{wqer}$(旋转了第一个长为 $2$ 的子串)
- $\texttt{weqr}$(旋转了第二个长为 $2$ 的子串)
- $\texttt{werq}$(旋转了最后一个长为 $2$ 的子串)
所以,$s$ 经过 $k = 2$ 的一系列变化后最终会变成 $\texttt{werq}$。
Vasya 希望选择一个 $k$,使得经过上述变化的字符串字典序最小。如果多个不同的 $k$ 都能满足要求,他想要取最小的一个。他正忙着参加 Felicity 2020,于是他叫你来帮他。
一个字符串 $a$ 比 $b$ 字典序更小需要以下条件中只有一个满足:
- $a$ 是 $b$ 的前缀,但 $a \ne b$;
- 在从左往右 $a$ 和 $b$ 第一个不同的位置,$a$ 上的字符在字母表中比 $b$ 上字符更靠前。
输入格式
每一个测试点有多组数据。
第一行有一个整数 $t(1\leq t\leq 5000)$ 表示数据组数。
每组数据第一行包含一个整数 $n$,表示字符串长度。
第二行包含一个有 $n$ 个小写英文字母的字符串 $s$。
保证每组数据的 $n$ 不会超过 $5000$。
输出格式
对于每一组数据打印两行:
第一行是可以达到的字典序最小的字符串 $s'$。
第二行是与之相应的 $k(1\leq k\leq n)$ 用来进行修改。如果多个 $k$ 都可以达到字典序最小的字符串,请打印最小的一个 $k$。
说明/提示
In the first testcase of the first sample, the string modification results for the sample abab are as follows :
- for $ k = 1 $ : abab
- for $ k = 2 $ : baba
- for $ k = 3 $ : abab
- for $ k = 4 $ : babaThe lexicographically smallest string achievable through modification is abab for $ k = 1 $ and $ 3 $ . Smallest value of $ k $ needed to achieve is hence $ 1 $ .