#include #define on(x , y) ((x) & (1<<(y))) #define X first #define Y second using namespace std; typedef pair < long long , long long > point; int n; bool ccw(point a, point b, point c){ return (b.X-a.X)*(c.Y-b.Y) - (b.Y-a.Y)*(c.X-b.X) >= 0; } const int MX = (1<<20); point P[MX]; int T , ans[MX]; vector < int > stacks[MX]; int main(){ scanf("%d",&T); while(T--){ scanf("%d",&n); for(int j = 1 ; j <= n ;j++) scanf("%lld %lld",&P[j].first,&P[j].second); P[n + 1].first = P[n].first + 1; P[n + 1].second = 10000000000ll; int cur = 0; stacks[0].clear(); stacks[0].push_back(n + 1); for(int j = n ; j ; j--){ ans[j] = -1; if(P[j].Y < P[stacks[cur].back()].Y){ stacks[++cur].clear(); stacks[cur].push_back(j); continue; } while(P[j].Y > P[stacks[cur].back()].Y) cur--; ++cur; while(1){ int sz = stacks[cur].size(); if(sz < 2) break; if(ccw(P[j] , P[stacks[cur][sz-1]] , P[stacks[cur][sz-2]])) stacks[cur].pop_back(); else break; } ans[j] = stacks[cur].back(); stacks[cur].push_back(j); } for(int j = 1 ; j <= n ; j++) cout<