#include #include #include #include #include #include #include #include #include #include using namespace std; inline void rd(int &res){ char c;res=0; while(c=getchar(),c<48); do res=(res<<1)+(res<<3)+(c^48); while(c=getchar(),c>47); } const int M=1e5+5,INF=1e9+7; int n,A[M],B[M],res[M]; void solve(){ rd(n); for(int i=1;i<=n;i++)rd(A[i]); int k,R=0; for(int i=1;i<=n;i++){ k=lower_bound(B,B+R,A[i])-B; if(k==R)B[R++]=A[i]; else B[k]=A[i]; printf("%d",k+1); if(i!=n)putchar(' '); else putchar('\n'); } } int main(){ int T; rd(T); while(T--){ solve(); } return 0; }