CF1991B AND Reconstruction

题目描述

给定一个由 $ n - 1 $ 个整数组成的数组 $ b $。 一个数组 $ a $ 被称为是“好的”当且仅当对于 $ 1 \le i \le n-1 $,都有 $ b_i = a_i \, \& \, a_{i + 1} $ 其中$ \& $ 表示[按位与运算](https://en.wikipedia.org/wiki/Bitwise_operation#AND)。 你的任务是构造一个“好的”数组,或输出 `-1` 表示不存在“好的”数组。

输入格式

有多组数据。第一行是一个整数 $ t $ ( $ 1 \le t \le 10^4 $ ),表示数据组数。 每组数据的第一行有一个正整数 $ n $ ( $ 2 \le n \le 10^5 $ ),表示数组 $ a $ 的长度 第二行有 $ n - 1 $ 个整数, $ b_1, b_2, \ldots, b_{n - 1} $ ( $ 0 \le b_i < 2^{30} $ ),表示 $ b $ 数组。 保证所有数据中 $ n $ 的和不超过 $ 10^5 $。

输出格式

对于每组数据,若不存在“好的”数组输出 `-1`。 否则输出 $ n $ 个用空格分隔的整数 $ a_1, a_2, \ldots, a_n $ ( $ 0 \le a_i < 2^{30} $ ) 表示一个“好的”数组。 若有多种方案,输出任意一种都可。

说明/提示

对于第一组样例,$ b = [1] $。一个可能的"好的"数组是 $ a=[5, 3] $。因为 $ a_1 \, \& \, a_2 = 5 \, \& \, 3 = 1 = b_1 $。 对于第二组样例,$ b = [2, 0] $。一个可能的"好的"数组是 $ a=[3, 2, 1] $。因为 $ a_1 \, \& \, a_2 = 3 \, \& \, 2 = 2 = b_1 $ and $ a_2 \, \& \, a_3 = 2 \, \& \, 1 = 0 = b_2 $。 对于第三组样例,$ b = [1, 2, 3] $。可以证明不存在"好的"数组,所以输出 `-1`。 对于第四组样例,$ b = [3, 5, 4, 2] $。一个可能的"好的"数组是 $ a=[3, 7, 5, 6, 3] $。