#include<bits/stdc++.h>
using namespace std;
long long t,n,tot,num,cnt;
long long w[1000010],y[1000010];
set<long long> stl,str;
struct line{
long long l,r,c,id,ans;
}z[1000010];
struct tree{
long long num,tag;
}tre[1000010];
bool px(line a,line b)
{
if(a.c<b.c) return true;
if(a.c>b.c) return false;
return false;
}
bool px1(line a,line b)
{
if(a.id<b.id) return true;
if(a.id>b.id) return false;
return false;
}
void pushup(long long x)
{
tre[x].num=tre[x<<1].num+tre[x<<1|1].num;
}
void pushdown(long long x,long long l,long long r)
{
long long mid=(l+r)/2;
tre[x<<1].num+=(mid-l+1)*tre[x].tag;
tre[x<<1|1].num+=(r-mid)*tre[x].tag;
tre[x<<1].tag+=tre[x].tag;
tre[x<<1|1].tag+=tre[x].tag;
tre[x].tag=0;
}
void build(long long x,long long l,long long r)
{
//cout<<l<<" "<<r<<"\n";
if(l==r)
{
tre[x].num=0;
tre[x].tag=0;
return;
}
int mid=(l+r)/2;
build(x<<1,l,mid);
build(x<<1|1,mid+1,r);
pushup(x);
}
void update(long long x,long long l,long long r,long long ql,long long qr,long long k)
{
//cout<<l<<" "<<r<<" "<<ql<<" "<<qr<<"\n";
if(ql<=w[l]&&w[r]<=qr)
{
tre[x].num+=(r-l+1)*k;
tre[x].tag+=k;
return;
}
pushdown(x,l,r);
int mid=(l+r)/2;
if(ql<=w[mid]) update(x<<1,l,mid,ql,qr,k);
if(qr>=w[mid+1]) update(x<<1|1,mid+1,r,ql,qr,k);
//cout<<(x<<1|1)<<" "<<w[mid+1]<<" "<<w[r]<<" "<<ql<<" "<<qr<<" "<<k<<"\n";
pushup(x);
}
long long query(long long x,long long l,long long r,long long ql,long long qr)
{
//cout<<l<<" "<<r<<" "<<ql<<" "<<qr<<"\n";
if(ql<=w[l]&&w[r]<=qr)
{
return tre[x].num;
}
pushdown(x,l,r);
int mid=(l+r)/2,ans=0;
if(ql<=w[mid]) ans+=query(x<<1,l,mid,ql,qr);
if(w[mid+1]<=qr) ans+=query(x<<1|1,mid+1,r,ql,qr);
return ans;
}
signed main()
{
//freopen("ti.in","r",stdin);
ios::sync_with_stdio(0);
cin>>t;
while(t--)
{
cin>>n;
tot=0;
for(int i=1;i<=n;i++)
{
cin>>z[i].l;
cin>>z[i].r;
cin>>z[i].c;
//cout<<1<<" "<<1<<" "<<1<<"\n";
tot++;y[tot]=z[i].l;tot++;y[tot]=z[i].r;
stl.insert(z[i].l);
str.insert(z[i].r);
z[i].id=i;
}
sort(y+1,y+1+tot);
num=0;cnt=0;
while(num<tot)
{
num++;
cnt++;
w[cnt]=y[num];
while(num+1<=tot&&y[num+1]==y[num]) num++;
}
build(1,1,cnt);
for(int i=1;i<=n;i++)
{
update(1,1,n,z[i].l,z[i].r,1);
update(1,1,n,z[i].l,z[i].r,1);
}
sort(z+1,z+1+n,px);
int i=1;
while(i<=n)
{
num=0;
while(i+num+1<=n&&z[i+num+1].c==z[i+num].c)
{
num++;
update(1,1,cnt,z[i+num].l,z[i+num].r,-1);
stl.erase(z[i+num].l);
str.erase(z[i+num].r);
}
for(int j=i;j<=i+num;j++)
{
if(query(1,1,cnt,z[j].l,z[j].r)!=0)
{
z[j].ans=0;
continue;
}
auto a=stl.lower_bound(z[j].r);
auto b=str.lower_bound(z[j].l);
z[j].ans=min((*a)-z[j].r,z[j].l-(*(--b)));
}
i++;
i+=num;
}
sort(z+1,z+1+n,px1);
for(int i=1;i<=n;i++) cout<<z[i].ans<<" ";
cout<<"\n";
}
//fclose(stdin);
return 0;
}