import
java.math.BigInteger;
class
GFG {
public
static
void
constructArr(BigInteger[] A,
int
N,
BigInteger K)
{
BigInteger sum = BigInteger.valueOf(
0
);
for
(
int
i =
0
; i < N; i++) {
sum = sum.add(A[i]);
}
if
(sum.compareTo(K) ==
1
) {
System.out.println(-
1
);
return
;
}
K = K.subtract(sum);
BigInteger[] B =
new
BigInteger[N];
for
(
int
i =
0
; i < N; i++) {
BigInteger curr = A[i];
BigInteger j = BigInteger.valueOf(
32
);
while
(j.compareTo(BigInteger.valueOf(
0
)) ==
1
&& K.compareTo(BigInteger.valueOf(
0
))
==
1
) {
BigInteger bit
= BigInteger.valueOf(
1
).shiftLeft(
j.intValue());
if
(curr.and(bit).compareTo(
BigInteger.valueOf(
0
))
==
0
&& bit.compareTo(K) !=
1
) {
curr = curr.or(bit);
K = K.subtract(bit);
}
j = j.subtract(BigInteger.valueOf(
1
));
}
B[i] = curr;
}
if
(K.compareTo(BigInteger.valueOf(
0
)) ==
0
) {
for
(
int
i =
0
; i < N; i++) {
System.out.print(B[i] +
" "
);
}
System.out.println();
}
else
{
System.out.println(-
1
);
}
}
public
static
void
main(String[] args)
{
BigInteger[] arr =
new
BigInteger[] {
BigInteger.valueOf(
1
), BigInteger.valueOf(
2
),
BigInteger.valueOf(
3
), BigInteger.valueOf(
4
)
};
int
N = arr.length;
BigInteger K = BigInteger.valueOf(
32
);
constructArr(arr, N, K);
}
}