#include<bits/stdc++.h>
#define int long long
using namespace std;
auto mread = [](){int x;scanf("%lld", &x);return x;};
int t = mread();
signed main(){
while(t --){
int n = mread();
int a[n + 5];
int la = -1, e = 1;
for(int i = 1; i <= n; i ++){
a[i] = mread();
if(i > 1 && a[i] != -1 && a[i - 1] != -1){
if(a[i] / 2 == a[i - 1] || a[i] == a[i - 1] / 2);
else{
e = 0;
}
}
}
if(e == 0){
printf("-1\n");
continue;
}
for(int i = 1; i <= n; i ++){
if(a[i] == -1){
continue;
}
else{
if(la == i - 1);
else{
if(la == -1){
for(int j = i - 1; j >= 1; j --){
if(a[j + 1] == 1){
a[j] = 2;
}
else{
a[j] = a[j + 1] / 2;
}
}
}
else{
if(a[i] == a[la]){
if((i - la - 1) % 2 == 0){
e = 0;
break;
}
for(int j = la + 1; a[j] == -1; j ++){
if(a[j - 1] == a[i]){
a[j] = a[j - 1] * 2;
}
else{
a[j] = a[i];
}
}
}
else{
e = 0;
int now = 0, sum = 0, e2 = 0;
for(int j = a[la]; j; j /= 2){
sum = now;
for(int k = a[i]; k; k /= 2){
if(j == k){
e2 = 1;
break;
}
sum ++;
}
if(e2){
e2 = 0;
int tmp = i - la - 1 - (sum - 1);
if(tmp < 0 || tmp % 2 == 1){
now ++;
continue;
}
e = 1;
int p;
for(int k = la + 1; 1; k ++){
if(a[k - 1] != j){
a[k] = a[k - 1] / 2;
}
else{
p = k;
break;
}
}
for(int k = i - 1; 1; k --){
if(a[k + 1] != j){
a[k] = a[k + 1] / 2;
}
else{
break;
}
}
for(int k = p; a[k] == -1; k ++){
if(a[k - 1] == j){
a[k] = a[k - 1] * 2;
}
else{
a[k] = j;
}
}
break;
}
now ++;
}
if(e == 0){
break;
}
}
}
}
la = i;
}
}
if(e == 0){
printf("-1\n");
continue;
}
if(la == -1){
a[1] = 1;
la = 1;
}
for(int i = la + 1; i <= n; i ++){
if(a[i - 1] == 1){
a[i] = 2;
}
else{
a[i] = a[i - 1] / 2;
}
}
for(int i = 1; i <= n; i ++){
assert(a[i] != -1);
printf("%lld ", a[i]);
}
printf("\n");
}
return 0;
}