#CF1753A2. 构造零总和

构造零总和

构造零总和

  • 时间限制:2 秒
  • 内存限制:256 MiB

题目描述

给定一个只含 −1-1、00 和 11 的数组 a1,a2,…,ana_1,a_2,\ldots,a_n。请把整个数组划分成若干个连续区间 [l1,r1],[l2,r2],…,[lk,rk][l_1,r_1],[l_2,r_2],\ldots,[l_k,r_k],其中 l1=1l_1=1、rk=nr_k=n,且相邻区间首尾相接。

区间 [l,r][l,r] 的交错和定义为

al−al+1+al+2−al+3+⋯±ar.a_l-a_{l+1}+a_{l+2}-a_{l+3}+\cdots\pm a_r.

要求所有区间交错和的总和等于 00。若存在多种合法划分,可以输出任意一种;不要求区间数最少。若不存在合法划分,需要报告无解。

输入格式

第一行包含一个整数 tt,表示测试用例数。

每个测试用例的第一行包含一个整数 nn,第二行包含 nn 个整数 a1,a2,…,ana_1,a_2,\ldots,a_n。

输出格式

对每个测试用例,若无解,输出一行 -1。

否则先输出区间数 kk,随后输出 kk 行,每行两个整数 li,ril_i,r_i。这些区间必须恰好、不重不漏地覆盖 [1,n][1,n],并使全部区间交错和的总和为 00。

样例输入 1

5
4
0 0 0 0
7
-1 1 0 1 0 1 0
5
0 -1 1 0 1
3
1 0 1
1
1

样例输出 1

4
1 1
2 2
3 3
4 4
4
1 1
2 2
3 5
6 7
-1
2
1 1
2 3
-1

数据范围

对于所有数据,1≤t≤10 0001\le t\le 10\,000,1≤n≤200 0001\le n\le 200\,000,ai∈{−1,0,1}a_i\in\{-1,0,1\},且所有测试用例的 nn 之和不超过 200 000200\,000。

子任务编号 分值 特殊限制
1 30 t≤4t\le 4 且 n≤16n\le 16
2 n≤500n\le 500 且所有测试用例的 ∑n2≤250 000\sum n^2\le 250\,000
3 40 无特殊限制