#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
const int maxN = 1 << 19;
const long long INF = 1000000000000ll;
const long double E = 1e-11;
int T[maxN], lck[maxN];
void solve() {
  int n;
  scanf("%d", &n);
  for (int i = (0); i < (n); i++) scanf("%d", T + i);
  for (int i = (0); i < (n); i++) scanf("%d", lck + i);
  vector<int> temp;
  for (int i = (0); i < (n); i++)
    if (!lck[i]) temp.push_back(T[i]);
  sort((temp).begin(), (temp).end());
  reverse((temp).begin(), (temp).end());
  int j = 0;
  for (int i = (0); i < (n); i++)
    if (!lck[i]) T[i] = temp[j++];
  for (int i = (0); i < (n); i++) printf("%d ", T[i]);
  printf("\n");
}
int main() {
  int t = 1;
  scanf("%d", &t);
  for (int tid = (1); tid < (t + 1); tid++) {
    solve();
  }
  return 0;
}
