小苯的字符串染色
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

小苯有一个长度为 n 的字符串 s,其中有一些字符是黑色的,其余则为白色,他希望你可以给 s 涂色,使得涂完后的 s 是纯白色的。
具体的涂色操作:
\bullet 选择一个长度为奇数的区间 [l, r]\ (1 \leq l \leq r \leq n) 同时 r-l+1 是奇数,接着将区间内的字符按照:白,跳过,白,跳过,白...的方式涂色(跳过的地方不涂色)。
即:s_ls_r 涂成白色,中间每间隔一个涂白一个的方式。

小苯限制你最多进行 n 次涂色操作,请你构造一个合法涂色方案,使得涂色完后的字符串是全白色的吧,注意你不必最小化操作次数。
(注意,已经涂好颜色的地方依然可以被后续的涂色覆盖。)

输入描述:

本题含有多组测试数据。
第一行一个正整数 T\ (1 \leq T \leq 100),表示测试数据的组数。
接下来对于每组测试数据,输出包含两行:
第一行一个正整数 n\ (1 \leq n \leq 5000),表示字符串 s 的长度。
第二行一个长度为 n01s。(保证 s 仅有字符 '0' 和 '1' 构成,其中 '0' 代表白色,'1' 代表黑色。)
(保证所有测试数据中,n 的总和不超过 5000。)

输出描述:

对于每组测试数据,第一行输出一个整数 m\ (0 \leq m \leq n),表示进行操作的次数。
接下来 m 行,每行两个正整数 l, r\ (1 \leq l \leq r \leq n), ((r-l+1)\%2=1),表示对 s_l, s_{l+1}, \cdots ,s_r 这一段区间执行涂色操作。
(有多解输出任意即可,可以证明一定有解。)
示例1

输入

复制
1
6
101101

输出

复制
2
1 3
4 6

说明

s 的颜色是:黑白黑黑白黑。
可以进行两次操作:
先涂 [1,3] 区间,操作后 s 变为:白白白黑白黑。
再涂 [4,6] 区间,操作后 s 变为全白。