01分数规划
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定一个字符串 s,仅含 0, 1, ? 三种字符,你必须将所有 ? 替换为 10

定义 s 的美好值为将所有?进行替换后,s最长连续 1 或 0 的子串的长度。请你进行所有替换后,使得字符串 s 的美好值最大,请输出这个美好值。

输入描述:

本题包含多组数据

第一行包含一个正整数 T \left( 1 \le T\le 2\times10^{5} \right),表示测试数据组数。

对于每组数据:

第一行包含一个正整数 n\left( 1 \le n\le 1\times10^{6} \right),表示字符串 s 的长度|s|

接下来一行一个字符串 s,描述如题目所示,s_i \in \left\{1,0,? \right\}\left (1 \le i \le n \right )

数据保证 \sum_{i=1}^{T} |s| \le 1 \times 10^6

输出描述:

对于每组数据:

输出一行一个整数,代表字符串 s 的最大美好值。
示例1

输入

复制
5
5
01110
1
0
4
01??
3
110
3
1??

输出

复制
3
1
3
2
3