#HK5483. 「UOI 2016 Stage 4 Day1」拉夫鲁什卡与数组划分

「UOI 2016 Stage 4 Day1」拉夫鲁什卡与数组划分

题目描述

题目译自 Ukrainian Olympiads in Informatics 2016 Stage 4 Day2 T3. Лаврушка і розбиття масиву

拉夫鲁什卡是一名勤奋好学的学生,梦想成为一名程序员。在最近一节信息学课上,他敬爱的老师给他出了这样一道题。给定一个自然数序列 a1,,aNa_1, \dots, a_N。拉夫鲁什卡需要将数字序列 1,2,3,,N1, 2, 3, \dots, N 划分为两个序列 b1,,bMb_1, \dots, b_Mc1,,cKc_1, \dots, c_K,使得:

  • 每个自然数 1rN1 \leq r \leq N 都恰好是序列 bb 或序列 cc 中的一个元素(因此 M+K=NM + K = N)。
  • 对于任意一对索引 1i,jM,ij1 \leq i, j \leq M, i \neq j,数 abia_{b_i}abja_{b_j} 都是互质的。
  • 对于任意一对索引 1i,jK,ij1 \leq i, j \leq K, i \neq j,数 acia_{c_i}acja_{c_j} 都是互质的。

互质数是指最大公约数等于 11 的数。我们将对序列 1,2,3,,N1, 2, 3, \dots, N 的这种划分称为序列 aia_i 的一个划分

序列的划分可能不唯一。因此,老师要求拉夫鲁什卡找到一个能使序列 bib_i 中元素数量最大化的划分。如果存在多个能使序列 bib_i 元素数量最大化的划分,则需要在这些划分中找到一个,使得序列 bib_i 的字典序最小。

我们称序列 q1,q2,,qWq_1, q_2, \dots, q_W 的字典序小于序列 p1,p2,,pWp_1, p_2, \dots, p_W,如果存在一个索引 ii,使得 qi<piq_i<p_i,并且对于任意的 j<ij<i,都有 pj=qjp_j=q_j

请编写一个名为 split 的程序,对于给定的数字序列 aa,找到将数字序列 1,2,3,,N1, 2, 3, \dots, N 划分为两个序列 b1,,bMb_1, \dots, b_Mc1,,cKc_1, \dots, c_K 的最优划分。

输入格式

输入文件的第一行包含一个数字 ZZ (1Z3)(1 \leq Z \leq 3),测试数据的数量。

接下来是 ZZ 组测试数据,格式如下。

数据的第一行包含一个数字 NN (1N100000)(1 \leq N \leq 100000),表示序列 aa 中的元素数量。

下一行包含 NN 个用单个空格分隔的数字,表示序列 aa (1ai2000000)(1 \leq a_i \leq 2000000) 的元素。

输出格式

对于每组测试数据,向输出文件的一行中输出一个数字 MM,表示序列 bb 中的元素数量,在第二行中输出 MM 个自然数,表示按升序排列的、被分入序列 bb 的序列 aa 的元素编号。

如果碰巧老师弄错了,不存在任何对序列 aa 的划分,则在单独一行中输出 1-1

2
5
1 2 3 4 5
5
2 3 4 5 6

4
1 2 3 5 
-1

数据范围与提示

详细子任务附加限制及分值如下表所示:

子任务 分值 附加限制
11 2424 N15,1ai2000000N \leq 15, 1 \leq a_i \leq 2000000
22 2424 N1000,1ai2000000N \leq 1000, 1 \leq a_i \leq 2000000
33 3030 N20000,1ai2000000N \leq 20000, 1 \leq a_i \leq 2000000
44 2222 N100000,1ai2000000N \leq 100000, 1 \leq a_i \leq 2000000