P12765 [POI 2018 R3] 三座塔 2 Three towers 2

题目背景

翻译来自于 [LibreOJ](https://loj.ac/p/5073)。

题目描述

**题目译自 [XXV Olimpiada Informatyczna — III etap](https://sio2.mimuw.edu.pl/c/oi25-3/dashboard/) [Trzy wieże 2](https://szkopul.edu.pl/problemset/problem/VAWioeFeAgo2s3xeUQAd_amg/statement/)** 小朋友 Bitoni 热爱玩耍。他在房间里将 $n$ 个积木排成一列,每块积木为白色、灰色或黑色三种颜色之一。Bitoni 想挑选一段连续的积木,用这些积木搭建三座塔。 Bitoni 将搭建三座塔:白色积木建白塔,灰色积木建灰塔,黑色积木建黑塔。若某颜色积木在选段中缺失,对应塔的高度为 $0$。三座塔的高度必须互不相同(即每座塔的积木数不同)。Bitoni 必须使用所有选中的积木。帮助 Bitoni 编写程序,找出满足他要求的最长连续积木段。

输入格式

第一行包含一个正整数 $n$,表示积木数量。 第二行包含一个长度为 $n$ 的字符串 $a_1 a_2 \ldots a_n$,其中 $a_i$ 为字母 $\texttt{B}$、$\texttt{S}$ 或 $\texttt{C}$,分别表示第 $i$ 块积木的颜色($\texttt{B}$ 为白色,$\texttt{S}$ 为灰色,$\texttt{C}$ 为黑色)。

输出格式

输出一行:若无法从任何连续积木段建满足要求的塔,输出 `NIE`;否则,输出一个整数,表示满足 Bitoni 要求的最长连续积木段的积木数。

说明/提示

**样例 1 解释** Bitoni 可选长度为 $6$ 的积木段 BSSBCS,搭建灰塔($3$ 块)、白塔($2$ 块)、黑塔($1$ 块)。 **附加样例** 1. $n=2500$,积木序列为 $\texttt{B}^{1248} \texttt{C}\underline{\texttt{SB}^{1250}}$($\texttt{B}^{k}$ 表示 B 重复 $k$ 次),最长可选段已标出。 2. $n=1000000$,积木序列为 $\texttt{BSCBSCBSC...BSCBSCB}$,答案 `NIE`。 详细子任务附加限制及分值如下表所示。 | 子任务 | 附加限制 | 分值 | | :---: | :--: | :---: | | $1$ | $n \leq 2500$ | $30$ | | $2$ | $n \leq 1000000$ | $70$ |