P7478 StickSuger

题目背景

YSGHYYDS

题目描述

YSGH 给你一个长度为 $n$ 的字符串 $S$。设 $S_x$ 表示字符串 $S$ 的第 $x$ 个字符。你可以选择一个二元组 $(i,j)$,然后交换 $S_i$ 和 $S_j$。二元组 $(i,j)$ 是合法的当且仅当 $1\leq ic_1$ 当且仅当 $c_0$ 的 ASCII 码大于 $c_1$ 的 ASCII 码。 对于两个长度为 $n$ 的字符串 $S,T$,$S$ 的字典序大于 $T$ 当且仅当存在一个 $i\in [0,n-1]$ 使得 $\forall j\in[1,i],S_j=T_j$, 并且 $S_{i+1}>T_{i+1}$。 如果存在多种合法方案,输出最大的二元组。 对于两个二元组 $(i_1,j_1)$,$(i_2,j_2)$,称 $(i_1,j_1)$ 小于 $(i_2,j_2)$ 当且仅当 $i_1

输入格式

第一行,一个正整数 $n$,表示字符串 $S$ 的长度。 第二行,一个字符串 $S$。

输出格式

如果无解,输出 `-1`。 否则一行输出两个整数 $i,j$ 表示最大的合法二元组 $(i,j)$。

说明/提示

**【样例解释 #1】** 如果选择二元组 $(2,3)$,交换 $S_2$ 和 $S_3$ 后的字符串为 `abc`,字典序比 `acb` 小,所以不合法。 如果选择二元组 $(1,3)$,交换 $S_1$ 和 $S_3$ 后的字符串为 `bca`,字典序比 `acb` 大,是合法的。 虽然 $(1,2)$ 也是合法的,但是没有 $(1,3)$ 大。所以答案是 $(1,3)$。 **【样例解释 #2】** 容易看出任何一个二元组都不合法。 --- **【数据范围】** **本题采用捆绑测试。** 对于 $100\%$ 的数据,$1\leq n\leq 10^6$,$S$ 只包含小写英文字母。 - Subtask 1(4 points):$S$ 只包含一种字符。 - Subtask 2(10 points):$n\leq 100$。 - Subtask 3(16 points):$n\leq 500$。 - Subtask 4(25 points):$n\leq 5000$。 - Subtask 5(18 points):$n\leq 10^5$。 - Subtask 6(27 points):$n\leq 10^6$。