#include using namespace std; typedef signed long long ll; #define _P(...) (void)printf(__VA_ARGS__) #define FOR(x,to) for(x=0;x<(to);x++) #define FORR(x,arr) for(auto& x:arr) #define FORR2(x,y,arr) for(auto& [x,y]:arr) #define ALL(a) (a.begin()),(a.end()) #define ZERO(a) memset(a,0,sizeof(a)) #define MINUS(a) memset(a,0xff,sizeof(a)) template bool chmax(T &a, const T &b) { if(a bool chmin(T &a, const T &b) { if(a>b){a=b;return 1;}return 0;} //------------------------------------------------------- int T; int N; ll M,K; vector S[201010],G; int TL[201010]; ll LS[201010]; pair re[201010]; ll X[202020]; int ret[202020][3]; int nex; ll did; template> struct SuffixArray { int N; vector rank,lcp,sa,rsa; ST S; void build(ST S){ this->S=S; int i,h=0; vector tmp; N=S.size(); rank.resize(N+1); sa.resize(N+1); tmp.resize(N+1); FOR(i,N+1) sa[i]=i, rank[i]=i==N?-1:S[i]; for(int k=1; k<=N; k<<=1) { auto pred2 = [k,this](int& a,int &b)->bool{ return (((a+k<=N)?rank[a+k]:-1)<((b+k<=N)?rank[b+k]:-1));}; auto pred = [pred2,k,this](int& a,int &b)->bool{ return (rank[a]!=rank[b])?(rank[a]>T; while(T--) { cin>>N>>K; ll sum=0; G.clear(); FOR(i,1) { G.resize(N); FOR(j,N) { cin>>G[j]; TL[j]=N-j; re[j]={i+1,j+1}; sum+=j+1; } } sa.build(G); int cur=0; vector> Rs={{0,0}}; for(i=G.size();i>=0;i--) { while(Rs.back().first>sa.lcp[i]) { x=Rs.back().first; y=Rs.back().second; Rs.pop_back(); k=max(Rs.back().first,sa.lcp[i]); sum-=1LL*(x-k)*(y-i); while(cur>=0&&K>sum) { ret[cur][0]=re[sa.sa[i+1]].first; ret[cur][1]=re[sa.sa[i+1]].second; ret[cur][2]=re[sa.sa[i+1]].second+k+(K-sum-1)/(y-i); cur--; } if(Rs.back().first