#CF1905C. 最大子序列

最大子序列

C. 最大子序列

每个测试点时间限制:11

每个测试点内存限制:256256 兆字节

给定一个长度为 nn 的字符串 ss

一次操作中,你可以选择字符串 ss字典序最大子序列,并将这个子序列进行一次循环右移

你的任务是计算:最少需要多少次操作,才能使字符串 ss 变为有序;如果永远无法变为有序,则输出 1-1

其中:

  • 若字符串 aa 与字符串 bb 满足以下任意一种情况,则称 aa 的字典序小于 bb
    • aabb 的前缀,但 aba \ne b
    • 在两者第一次不同的位置上,字符串 aa 的该位置字符在字母表中早于字符串 bb 对应位置的字符。
  • 对字符串 t1t2tmt_1 t_2 \dots t_m 进行一次循环右移后,会变为:
tmt1tm1t_m t_1 \dots t_{m-1}

输入格式

每个输入包含多组测试数据。

第一行包含一个整数 tt,表示测试数据组数,其中:

1t1041 \le t \le 10^4

对于每组测试数据:

第一行包含一个整数 nn,表示字符串 ss 的长度,其中:

1n21051 \le n \le 2 \cdot 10^5

第二行包含一个长度为 nn 的字符串 ss,仅由小写英文字母组成。

保证所有测试数据中 nn 的总和不超过:

21052 \cdot 10^5

输出格式

对于每组测试数据,输出一个整数,表示让字符串 ss 变为有序所需的最少操作次数;如果无法做到,则输出 1-1

样例输入

6
5
aaabc
3
acb
3
bac
4
zbca
15
czddeneeeemigec
13
cdefmopqsvxzz

样例输出

0
1
-1
2
6
0

说明

在第 11 组测试数据中,字符串 ss 已经有序,因此不需要任何操作。

在第 22 组测试数据中,进行一次操作后,我们会选择子序列 cbcb 并将其循环右移。此时字符串 ss 变为 abcabc,已经有序。

在第 33 组测试数据中,字符串 ss 无法变为有序。

在第 44 组测试数据中,操作过程如下:

  • 字典序最大的子序列为 zcazca。操作后字符串变为 abzcabzc
  • 此时字典序最大的子序列为 zczc。操作后字符串变为 abczabcz

此时字符串已经有序,因此答案是 22