#include <bits/stdc++.h>
#define fo(i,a,b) for(i=a;i<=b;i++)
#define fd(i,a,b) for(i=a;i>=b;i--)
using namespace std;
const long long maxn=100000+10,B=318;
long long f[B+10][B+10],num[B+10],g[maxn][B+10];
long long tree[maxn];
long long a[maxn],belong[maxn],b[maxn],c[maxn],d[maxn];
long long sum[maxn],cnt[maxn];
long long i,j,k,l,r,s,t,n,m,tot,top,now,_;
long long ans;
map<long long,long long>mp;
set<long long>st;
long long lowbit(long long x){return x&(-x);}
long long read(){
long long x=0,f=1;
char ch=getchar();
while (ch<'0'||ch>'9'){
if (ch=='-') f=-1;
ch=getchar();
}
while (ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
bool cmp(long long x,long long y){
return a[x]<a[y];
}
void change(long long x){
while (x>0){
tree[x]++;
x-=lowbit(x);
}
}
long long query(long long x){
long long t=0;
while (x<=n){
t+=tree[x];
x+=lowbit(x);
}
return t;
}
long long work(long long top,long long tot){
long long i=1,j=1,t=0;
while (i<=top&&j<=tot){
if (c[i]<=d[j]) i++;
else{
j++;
t+=top-i+1;
}
}
return t;
}
long long ask(long long x,long long l,long long r){
long long i;
long long t=sum[r]-(l==(x-1)*B+1?0:sum[l-1]);
top=0;
fo(i,(x-1)*B+1,min(x*B,n))
if (b[i]<l) c[++top]=a[b[i]];
tot=0;
fo(i,(x-1)*B+1,min(x*B,n))
if (b[i]>=l&&b[i]<=r) d[++tot]=a[b[i]];
t-=work(top,tot);
return t;
}
long long Query(long long j,long long k) {
l=belong[j];r=belong[k];
if (l==r){
ans=ask(l,j,k);
return ans;
}
cout<<j<<" "<<k<<"-"<<l<<" "<<r<<"\n";
ans=f[l+1][r-1];
/*ans+=ask(l,j,l*B);
ans+=ask(r,(r-1)*B+1,k);*/
ans+=cnt[j];
ans+=sum[k];
top=0;
fo(i,(l-1)*B+1,l*B)
if (b[i]>=j) c[++top]=a[b[i]];
tot=0;
fo(i,(r-1)*B+1,min(r*B,n))
if (b[i]<=k) d[++tot]=a[b[i]];
ans+=work(top,tot);
/*fo(i,l+1,r-1) ans+=g[j][i];
fo(i,l+1,r-1) ans+=g[k][i];*/
ans+=g[j][r-1]-g[j][l];
ans+=g[k][r-1]-g[k][l];
return ans;
}
long long main(){
_=read();
while(_--)
{
n=read();
fo(i,1,n) a[i]=read(),b[i]=a[i];
sort(b+1,b+n+1);
top=unique(b+1,b+n+1)-b-1;
fo(i,1,n) a[i]=lower_bound(b+1,b+top+1,a[i])-b;
fo(i,1,n) belong[i]=(i-1)/B+1;
fo(i,1,n) b[i]=i;
sort(b+1,b+n+1,cmp);
i=1;
while (i<=n){
t=a[b[i]];
j=i;
while (i<=n&&a[b[i]]==t){
fo(k,belong[b[i]]+1,belong[n]) g[b[i]][k]=num[k];
i++;
}
fo(k,j,i-1) num[belong[b[k]]]++;
}
fo(i,1,belong[n]) num[i]=0;
reverse(b+1,b+n+1);
i=1;
while (i<=n){
t=a[b[i]];
j=i;
while (i<=n&&a[b[i]]==t){
fo(k,1,belong[b[i]]-1) g[b[i]][k]=num[k];
i++;
}
fo(k,j,i-1) num[belong[b[k]]]++;
}
fo(j,1,belong[n])
fd(i,(j-1)*B,1)
if (i%B!=0) g[i][j]+=g[i+1][j];
fo(j,1,belong[n])
fo(i,j*B+1,n)
if (i%B!=1) g[i][j]+=g[i-1][j];
fo(i,1,n){
fo(j,1,belong[n]) g[i][j]+=g[i][j-1];
}
fo(j,1,belong[n]){
fo(i,0,n) tree[i]=0;
l=0;
fo(i,(j-1)*B+1,min(j*B,n)){
l+=query(a[i]+1);
sum[i]=l;
change(a[i]);
}
fo(i,0,n) tree[i]=0;
l=0;
fd(i,min(j*B,n),(j-1)*B+1){
l+=query(n-a[i]+2);
cnt[i]=l;
change(n-a[i]+1);
}
}
fo(i,1,n) b[i]=i;
fo(i,1,belong[n]){
l=(i-1)*B+1;r=min(i*B,n);
sort(b+l,b+r+1,cmp);
}
fo(i,1,belong[n]) f[i][i]=sum[min(i*B,n)];
fo(i,1,belong[n]-1)
fo(j,i+1,belong[n]){
top=0;
fo(k,(i-1)*B+1,i*B) c[++top]=a[b[k]];
tot=0;
fo(k,(j-1)*B+1,min(j*B,n)) d[++tot]=a[b[k]];
f[i][j]=work(top,tot);
}
fd(i,belong[n]-1,1)
fo(j,i+1,belong[n])
f[i][j]+=f[i][j-1]+f[i+1][j]-f[i+1][j-1];
long long p=0;
long long re=Query(1,n);
mp.clear();st.clear(); //为什么啊 为什么啊
mp[re]++;
mp[0]++;
st.insert(0);st.insert(n+1);
for(long long i=1;i<=n;i++){
p=read();
long long u=p^re;
long long L,R;
auto it=st.lower_bound(u);
R=(*it)-1;
it--;
L=(*it)+1;
st.insert(u);
// long long l=1,r=u;
// while(l<r)
// {
// long long mid=l+r>>1;
// if(query(mid)>query(u))l=mid+1;
// else r=mid;
// }
// L=l;
// l=u,r=n+1;
// while(l<r)
// {
// long long mid=l+r+1>>1;
// if(query(mid)<query(u))r=mid-1;
// else l=mid;
// }
// R=l-1; //找到了一个划分过了的L到R均可用的区间 为什么这样做是假的做法啊。曹了的
if(i==n)printf("%lld\n",re);
else printf("%lld ",re);
mp[Query(L,R)]--;
if(mp[Query(L,R)]==0)mp.erase(Query(L,R));
if(u+1<=R)
mp[Query(u+1,R)]++;
if(u-1>=L)
mp[Query(L,u-1)]++;
re=prev(mp.end())->first;
}
}
} //从来没见过这么恶心人的事情 真丝麻啊
//RE 又是RE 我RE私你的吗
// #include <bits/stdc++.h>
// using namespace std;
// long long a[30000000];
// // map<long long,long long>mp;
// long long main()
// {
// // for(long long i=1;i<=1000000;i++)
// // mp[i]=1;
// return 0;
// }
// 就是方法假了 否则不会RE
// 为什么这样是假的做法 我真的不懂了。
// 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么?
// 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么?
// 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么?
// 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么?
// 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么?
// 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么?
// 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么?
// 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么?
// 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么?
// 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么?
// 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么?
// 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么?
// 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么?
// 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么? 为什么?
// RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?
// RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?
// RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?RE?