#include <bits/stdc++.h>

using namespace std;

#define int long long
#define nn "\n"
#define pi pair<int, int>
#define fi first
#define se second
#define lb lower_bound
#define ub upper_bound
#define eb emplace_back
#define pb push_back
#define TASK " "

#define ms(a, x) memset(a, x, sizeof(a))
#define all(a) a.begin(), a.end()
#define All(a, n) a + 1, a + 1 + n

#define LOG 19

const int INF = 1e18;
const int mod = 1e9+7;
const int N = 2e5 + 5;
int MOD = 998244353;
int bit[200000];

struct node{
	int kc, u, hk;
	bool operator<(const node& other) const {
        return kc > other.kc;
    }
};

struct edge{
	int u, v, w;
	friend bool operator < ( edge a, edge b){
		return a.w < b.w;
	}
};

void nhap(){

}

void solve(){
    int n; cin >> n;
    vector<int> a(n + 5);
    int cnt1 = 0;
    vector<int> pos, pos1;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        if(a[i] == 1) pos.pb(i);
        if(a[i] == -1) pos1.pb(i);
    }
    int best = 0;
    int c = -1;
    int l = -1, r = -1;
    if(pos1.size() >= 2){
        int k = pos1.back() - pos1.front() + 1;
        if(k > best){
            best = k;
            c = 1;
            l = pos1.front();
            r = pos1.back();
        }
    }
    if(!pos.empty() && !pos1.empty()){
        for(int p : pos){
            auto it = lb(all(pos1), p);
            if(it != pos1.begin()){
                int prev_neg = *prev(it);
                int k = p - prev_neg + 1;
                if(k > best){
                    best = k;
                    c = 2;
                    l = prev_neg;
                    r = p;
                }
            }
            if(it != pos1.end()){
                int next_neg = *it;
                int k = next_neg - p + 1;
                if(k > best){
                    best = k;
                    c = 2;
                    l = p;
                    r = next_neg;
                }
            }
        }
    }
    if(pos.size() >= 2){
        for(size_t i = 1; i < pos.size(); i++) {
            int k = pos[i] - pos[i - 1] + 1;
            if (k > best) {
                best = k;
                c = 3;
                l = pos[i - 1];
                r = pos[i];
            }
        }
    }
    vector<int> ans = a;
    if(c == 1 || c == 2){
        ans[l] = 1;
        ans[r] = 1;
    }
    for(int i = 1; i <= n; i++){
        if(ans[i] == -1) ans[i] = 0;
    }
    for(int i = 1; i <= n; i++){
        cout << ans[i] << (i == n ? "" : " ");
    }
    cout << nn;
}

signed main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
    int t;
    cin >> t;
    while(t--){
        solve();
    }
	return 0;
}