#P1018. 故障机器人

故障机器人

故障机器人

题目描述

在充满危险的尖塔深处,你扮演一位名为"故障机器人"的角色。你的目标是悄无声息地穿过一群沉睡的"守卫",到达下一层。

每当你挑战一个房间时,房间里的守卫会被惊醒。这些守卫有不同的"警觉度"。你需要通过"分心"能力来降低警觉度。

规则:

  1. 你可以按任意顺序挑战 nn 个房间,每个房间有警觉度 aia_i。
  2. 挑战房间后,将 aia_i 加入当前的总警觉度。
  3. 在挑战下一个房间之前,你使用"分心"能力,总警觉度变为 total mod 4\text{total} \bmod 4。
  4. 失败条件:如果任何一次"分心"操作后总警觉度恰好等于1,警报被触发,挑战失败。
  5. 所有房间的警觉度总和是4的倍数。

你需要确认:是否存在一种挑战顺序,使得你在每次降低警觉度后都不会得到1?如果存在,输出该顺序;否则输出 −1-1。


形式化的,给定 nn 个整数 a1,a2,…,ana_1, a_2, \dots, a_n,表示每个房间的警觉度。你需要确定是否存在一种排列 p1,p2,…,pnp_1, p_2, \dots, p_n,使得对于每个 kk(1≤k≤n1 \leq k \leq n),前 kk 项之和对 44 取模都不等于 11。 如果存在这样的排列,输出任意一种;否则输出 −1-1。

输入格式

本题有多组数据。第一行一个整数 T(1≤T≤104) T (1 \leq T \leq 10^4) ,表示数据组数。

对于每组数据:

  • 第一行一个整数 n(1≤n≤105) n (1 \leq n \leq 10^5) 表示房间数。
  • 接下来一行 n 个整数 a1,…,an a_1, \dots, a_n (1≤∑i=1nai≤109)(1 \leq \sum_{i=1}^n a_i \leq 10^9) 表示每个房间的警觉度。
  • 保证 ∑i=1nai\sum_{i=1}^n a_i 是 4 的倍数,保证 TT 组数据中 n 的和不超过 10510^5。

输出格式

对于每组数据,如果不存在安全的顺序,输出 -1。

否则,输出一个排列 p_1, p_2, ..., p_n,表示挑战房间的顺序(p_i 是房间的原始编号)。如果有多种答案,输出任意一种即可。

样例 1

3
4
4 6 3 3
4
1 3 3 1
4
1 1 1 1
3 1 4 2
2 3 4 1
-1

提示

玩鸡煲玩的。 1