#include <bits/stdc++.h>
using namespace std;
mt19937 gen;
int gen_inrange(int a, int b){
return gen() % (b-a+1)+a;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int t;
int c;
cin>>t>>c;
if(t==1){
for(int i=0;i<c;i++){
int n;
cin>>n;
cout<<n<<" "<<n-1<<"\n";
for(int i=2;i<=n;i++){
if(gen_inrange(0,1)==1){
cout<<gen_inrange(1,i-1)<<" "<<i<<"\n";
}else{
cout<<i<<" "<<gen_inrange(1,i-1)<<"\n";
}
}
cout<<"\n";
}
}
if(t==2){
for(int i=0;i<c;i++){
int n;
cin>>n;
cout<<n<<" "<<n-1<<"\n";
vector<int> v (n);
for(int i=0;i<n;i++){
v[i]=i+1;
}
shuffle(v.begin(),v.end(),gen);
for(int i=0;i<n-1;i++){
cout<<v[i]<<" "<<v[i+1]<<"\n";
}
cout<<"\n";
}
}
if(t==3){
for(int i=0;i<c;i++){
int n;
cin>>n;
cout<<n<<" "<<n-1<<"\n";
vector<int> v (n);
for(int i=0;i<n;i++){
v[i]=i+1;
}
set<pair<int,int>> s;
shuffle(v.begin(),v.end(),gen);
for(int i=1;i<n;i++){
if(gen_inrange(0,1)==1){
cout<<v[0]<<" "<<v[i]<<"\n";
}else{
cout<<v[i]<<" "<<v[0]<<"\n";
}
}
cout<<"\n";
}
}
if((t==4)||(t==7)){
for(int i=0;i<c;i++){
int n,m;
cin>>n>>m;
cout<<n<<" "<<m<<"\n";
set<pair<int,int>> krawedzie;
while(krawedzie.size()<m){
int a,b;
a=gen_inrange(1,n);
b=gen_inrange(1,n);
if(a==b) continue;
if(a>b) swap(a,b);
krawedzie.insert({a,b});
}
for(auto [a,b]:krawedzie){
if(gen_inrange(0,1)==1){
cout<<a<<" "<<b<<"\n";
}else{
cout<<b<<" "<<a<<"\n";
}
}
}
}
if(t==5){
for(int i=0;i<c;i++){
int n;
cin>>n;
int m=n*(n-1)/2;
cout<<n<<" "<<m<<"\n";
vector<pair<int,int>> kra(m);
int s=0;
for(int i=1;i<n;i++){
for(int j=i+1;j<n+1;j++){
if(gen_inrange(0,1)==1){
kra[s]={i,j};
s++;
}else{
kra[s]={j,i};
s++;
}
}
}
shuffle(kra.begin(),kra.end(),gen);
for(int i=0;i<m;i++){
cout<<kra[i].first<<" "<<kra[i].second<<"\n";
}
cout<<"\n";
}
}
if(t==6){
for(int i=0;i<c;i++){
int n,m;
cin>>n>>m;
cout<<n<<" "<<m<<"\n";
set<pair<int,int>> krawedzie;
for(int i=1;i<=n-1;i++){
for(int j=i+1;j<=n;j++){
krawedzie.insert({i,j});
}
}
while(krawedzie.size()>m){
int a,b;
a=gen_inrange(1,n);
b=gen_inrange(1,n);
if(a==b) continue;
if(a>b) swap(a,b);
krawedzie.erase({a,b});
}
for(auto [a,b]:krawedzie){
if(gen_inrange(0,1)==1){
cout<<a<<" "<<b<<"\n";
}else{
cout<<b<<" "<<a<<"\n";
}
}
}
}
if(t==8){
for(int i=0;i<c;i++){
int n,m;
cin>>n>>m;
cout<<n<<" "<<m<<"\n";
vector<int> v (n);
for(int i=0;i<n;i++){
v[i]=i+1;
}
set<pair<int,int>> s;
shuffle(v.begin(),v.end(),gen);
for(int i=0;i<m;i++){
bool x=false;
while(x==false){
int a=gen_inrange(0,n-1);
int b=gen_inrange(0,n-1);
if(a>b) swap(a,b);
if((s.count({a,b})==0)&&(a!=b)){
x=true;
s.insert({a,b});
cout<<v[a]<<" "<<v[b]<<"\n";
}
}
}
cout<<"\n";
}
}
if(t==9){
for(int q=0; q<c;q++){
int n;
cin>>n;
cout<<n<<" "<<n-1<<"\n";
if(n==1){
cout<<"\n";
continue;
}
vector<int> v (n+1);
for(int i=1;i<n+1;i++){
v[i]=i;
}
shuffle(v.begin()+1,v.end(),gen);
int a=1;
while(2*a-1<n){
a*=2;
}//2a geq n
vector<bool> los (a);
for(int i=0; i<n-a+1;i++){
los[i]=1;
}
shuffle(los.begin(),los.end(),gen);
vector<int> tree (2*a);
for(int i=1; i<=a-1;i++){
tree[i]=i;
}
int k=a;
for(int i=a;i<2*a;i++){
if(los[i-a]){
tree[i]=k;
k++;
}
}
// for(int i=2;i<a;i++){
// int e=i/2;
// cout<<v[e]<<" "<<v[i]<<"\n";
//
// }
// for(int i=a;i<2*a;i++){
// if(los[i-a]){
// int e=i/2;
// cout<<v[e]<<" "<<v[tree[i]]<<"\n";
//
// }
// }
//
//
//
// cout<<"\n\n\n";
for(int i=2;i<n+1;i++){
int e=i/2;
if(gen_inrange(0,1)==1){
cout<<e<<" "<<i<<"\n";
}else{
cout<<i<<" "<<e<<"\n";
}
}
// for(int i=a;i<2*a;i++){
// if(los[i-a]){
// int e=i/2;
// if(gen_inrange(0,1)==1){
// cout<<e<<" "<<tree[i]<<"\n";
// }else{
// cout<<tree[i]<<" "<<e<<"\n";
// }
//
// }
// }
// cout<<"\n";
}
}
if(t==10){
for(int i=0;i<c;i++){
int n,m,k;
cin>>n>>m>>k;
vector<int> rep (n);//////indeks reprezentanta (0___k-1)
vector<vector<int>> indeksy (k);
vector<set<pair<int,int>>> krawedzie (k);
int liczkraw=0;
for(int i=0;i<2*k;i++){
rep[i]=i%k;
indeksy[rep[i]].push_back(i);
if(i>=k){
krawedzie[rep[i]].insert({i-k,i});
liczkraw++;
}
}
for(int i=2*k; i<n; i++){
rep[i]=gen_inrange(0,k-1);
int indpol = gen_inrange(0,indeksy[rep[i]].size()-1);
indeksy[rep[i]].push_back(i);
krawedzie[rep[i]].insert({indeksy[rep[i]][indpol],i});
liczkraw++;
}
while(liczkraw<m){
int spojna=gen_inrange(0,k-1);
int maks =indeksy[spojna].size()-1;
int a=gen_inrange(0,maks);
int b=gen_inrange(0,maks);
if(a==b) continue;
a = indeksy[spojna][a]; b = indeksy[spojna][b];
if(b<a) swap(a,b);
int temp = krawedzie[spojna].size();
krawedzie[spojna].insert({a,b});
if(krawedzie[spojna].size()>temp){
liczkraw++;
}
}
cout<<n<<" "<<m <<" "<<k<<"\n";
vector<int> v (n);
for(int i=0;i<n;i++){
v[i]=i+1;
}
shuffle(v.begin(),v.end(),gen);
for(int i=0; i<k; i++){
for(auto [x,y]:krawedzie[i]){
if(gen_inrange(0,1)==1){
cout<<v[x]<<" "<<v[y]<<"\n";
}else{
cout<<v[y]<<" "<<v[x]<<"\n";
}
}
}
cout<<"\n";
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgptdDE5OTM3IGdlbjsKCmludCBnZW5faW5yYW5nZShpbnQgYSwgaW50IGIpewogICAgcmV0dXJuIGdlbigpICUgKGItYSsxKSthOwp9CgppbnQgbWFpbigpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CgogICAgaW50IHQ7CiAgICBpbnQgYzsKICAgIGNpbj4+dD4+YzsKCiAgICBpZih0PT0xKXsKICAgICAgICBmb3IoaW50IGk9MDtpPGM7aSsrKXsKICAgICAgICAgICAgaW50IG47CiAgICAgICAgICAgIGNpbj4+bjsKICAgICAgICAgICAgY291dDw8bjw8IiAiPDxuLTE8PCJcbiI7CgogICAgICAgICAgICBmb3IoaW50IGk9MjtpPD1uO2krKyl7CiAgICAgICAgICAgICAgICBpZihnZW5faW5yYW5nZSgwLDEpPT0xKXsKICAgICAgICAgICAgICAgICAgICBjb3V0PDxnZW5faW5yYW5nZSgxLGktMSk8PCIgIjw8aTw8IlxuIjsKICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgIGNvdXQ8PGk8PCIgIjw8Z2VuX2lucmFuZ2UoMSxpLTEpPDwiXG4iOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQogICAgICAgICAgICBjb3V0PDwiXG4iOwoKICAgICAgICB9CiAgICB9CiAgICBpZih0PT0yKXsKICAgICAgICBmb3IoaW50IGk9MDtpPGM7aSsrKXsKICAgICAgICAgICAgaW50IG47CiAgICAgICAgICAgIGNpbj4+bjsKICAgICAgICAgICAgY291dDw8bjw8IiAiPDxuLTE8PCJcbiI7CiAgICAgICAgICAgIHZlY3RvcjxpbnQ+IHYgKG4pOwogICAgICAgICAgICBmb3IoaW50IGk9MDtpPG47aSsrKXsKICAgICAgICAgICAgICAgIHZbaV09aSsxOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzaHVmZmxlKHYuYmVnaW4oKSx2LmVuZCgpLGdlbik7CgogICAgICAgICAgICBmb3IoaW50IGk9MDtpPG4tMTtpKyspewogICAgICAgICAgICAgICAgY291dDw8dltpXTw8IiAiPDx2W2krMV08PCJcbiI7CgogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvdXQ8PCJcbiI7CgogICAgICAgIH0KICAgIH0KICAgIGlmKHQ9PTMpewogICAgICAgIGZvcihpbnQgaT0wO2k8YztpKyspewogICAgICAgICAgICBpbnQgbjsKICAgICAgICAgICAgY2luPj5uOwogICAgICAgICAgICBjb3V0PDxuPDwiICI8PG4tMTw8IlxuIjsKICAgICAgICAgICAgdmVjdG9yPGludD4gdiAobik7CiAgICAgICAgICAgIGZvcihpbnQgaT0wO2k8bjtpKyspewogICAgICAgICAgICAgICAgdltpXT1pKzE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2V0PHBhaXI8aW50LGludD4+IHM7CgogICAgICAgICAgICBzaHVmZmxlKHYuYmVnaW4oKSx2LmVuZCgpLGdlbik7CgogICAgICAgICAgICBmb3IoaW50IGk9MTtpPG47aSsrKXsKICAgICAgICAgICAgICAgIGlmKGdlbl9pbnJhbmdlKDAsMSk9PTEpewogICAgICAgICAgICAgICAgICAgIGNvdXQ8PHZbMF08PCIgIjw8dltpXTw8IlxuIjsKICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgIGNvdXQ8PHZbaV08PCIgIjw8dlswXTw8IlxuIjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KICAgICAgICAgICAgY291dDw8IlxuIjsKCiAgICAgICAgfQogICAgfQoKCiAgICBpZigodD09NCl8fCh0PT03KSl7CiAgICAgICAgZm9yKGludCBpPTA7aTxjO2krKyl7CiAgICAgICAgICAgIGludCBuLG07CiAgICAgICAgICAgIGNpbj4+bj4+bTsKICAgICAgICAgICAgY291dDw8bjw8IiAiPDxtPDwiXG4iOwoKICAgICAgICAgICAgc2V0PHBhaXI8aW50LGludD4+IGtyYXdlZHppZTsKCiAgICAgICAgICAgIHdoaWxlKGtyYXdlZHppZS5zaXplKCk8bSl7CiAgICAgICAgICAgICAgICBpbnQgYSxiOwogICAgICAgICAgICAgICAgYT1nZW5faW5yYW5nZSgxLG4pOwogICAgICAgICAgICAgICAgYj1nZW5faW5yYW5nZSgxLG4pOwoKICAgICAgICAgICAgICAgIGlmKGE9PWIpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgaWYoYT5iKSBzd2FwKGEsYik7CiAgICAgICAgICAgICAgICBrcmF3ZWR6aWUuaW5zZXJ0KHthLGJ9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yKGF1dG8gW2EsYl06a3Jhd2VkemllKXsKICAgICAgICAgICAgICAgIGlmKGdlbl9pbnJhbmdlKDAsMSk9PTEpewogICAgICAgICAgICAgICAgICAgIGNvdXQ8PGE8PCIgIjw8Yjw8IlxuIjsKICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgIGNvdXQ8PGI8PCIgIjw8YTw8IlxuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGlmKHQ9PTUpewogICAgICAgIGZvcihpbnQgaT0wO2k8YztpKyspewogICAgICAgICAgICBpbnQgbjsKICAgICAgICAgICAgY2luPj5uOwogICAgICAgICAgICBpbnQgbT1uKihuLTEpLzI7CiAgICAgICAgICAgIGNvdXQ8PG48PCIgIjw8bTw8IlxuIjsKICAgICAgICAgICAgdmVjdG9yPHBhaXI8aW50LGludD4+IGtyYShtKTsKICAgICAgICAgICAgaW50IHM9MDsKICAgICAgICAgICAgZm9yKGludCBpPTE7aTxuO2krKyl7CiAgICAgICAgICAgICAgICBmb3IoaW50IGo9aSsxO2o8bisxO2orKyl7CiAgICAgICAgICAgICAgICAgICAgaWYoZ2VuX2lucmFuZ2UoMCwxKT09MSl7CiAgICAgICAgICAgICAgICAgICAgICAgIGtyYVtzXT17aSxqfTsKICAgICAgICAgICAgICAgICAgICAgICAgcysrOwogICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICBrcmFbc109e2osaX07CiAgICAgICAgICAgICAgICAgICAgICAgIHMrKzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CiAgICAgICAgICAgIHNodWZmbGUoa3JhLmJlZ2luKCksa3JhLmVuZCgpLGdlbik7CiAgICAgICAgICAgIGZvcihpbnQgaT0wO2k8bTtpKyspewogICAgICAgICAgICAgICAgY291dDw8a3JhW2ldLmZpcnN0PDwiICI8PGtyYVtpXS5zZWNvbmQ8PCJcbiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY291dDw8IlxuIjsKICAgICAgICB9CiAgICB9CiAgICBpZih0PT02KXsKICAgICAgICAgICAgICAgIGZvcihpbnQgaT0wO2k8YztpKyspewogICAgICAgICAgICBpbnQgbixtOwogICAgICAgICAgICBjaW4+Pm4+Pm07CiAgICAgICAgICAgIGNvdXQ8PG48PCIgIjw8bTw8IlxuIjsKCiAgICAgICAgICAgIHNldDxwYWlyPGludCxpbnQ+PiBrcmF3ZWR6aWU7CiAgICAgICAgICAgIGZvcihpbnQgaT0xO2k8PW4tMTtpKyspewogICAgICAgICAgICAgICAgZm9yKGludCBqPWkrMTtqPD1uO2orKyl7CiAgICAgICAgICAgICAgICAgICAga3Jhd2VkemllLmluc2VydCh7aSxqfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHdoaWxlKGtyYXdlZHppZS5zaXplKCk+bSl7CiAgICAgICAgICAgICAgICBpbnQgYSxiOwogICAgICAgICAgICAgICAgYT1nZW5faW5yYW5nZSgxLG4pOwogICAgICAgICAgICAgICAgYj1nZW5faW5yYW5nZSgxLG4pOwoKICAgICAgICAgICAgICAgIGlmKGE9PWIpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgaWYoYT5iKSBzd2FwKGEsYik7CiAgICAgICAgICAgICAgICBrcmF3ZWR6aWUuZXJhc2Uoe2EsYn0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IoYXV0byBbYSxiXTprcmF3ZWR6aWUpewogICAgICAgICAgICAgICAgaWYoZ2VuX2lucmFuZ2UoMCwxKT09MSl7CiAgICAgICAgICAgICAgICAgICAgY291dDw8YTw8IiAiPDxiPDwiXG4iOwogICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgY291dDw8Yjw8IiAiPDxhPDwiXG4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaWYodD09OCl7CiAgICAgICAgZm9yKGludCBpPTA7aTxjO2krKyl7CiAgICAgICAgICAgIGludCBuLG07CiAgICAgICAgICAgIGNpbj4+bj4+bTsKICAgICAgICAgICAgY291dDw8bjw8IiAiPDxtPDwiXG4iOwogICAgICAgICAgICB2ZWN0b3I8aW50PiB2IChuKTsKICAgICAgICAgICAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICAgICAgICAgICAgICB2W2ldPWkrMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzZXQ8cGFpcjxpbnQsaW50Pj4gczsKCiAgICAgICAgICAgIHNodWZmbGUodi5iZWdpbigpLHYuZW5kKCksZ2VuKTsKCiAgICAgICAgICAgIGZvcihpbnQgaT0wO2k8bTtpKyspewogICAgICAgICAgICAgICAgYm9vbCB4PWZhbHNlOwoKICAgICAgICAgICAgICAgIHdoaWxlKHg9PWZhbHNlKXsKICAgICAgICAgICAgICAgICAgICBpbnQgYT1nZW5faW5yYW5nZSgwLG4tMSk7CiAgICAgICAgICAgICAgICAgICAgaW50IGI9Z2VuX2lucmFuZ2UoMCxuLTEpOwogICAgICAgICAgICAgICAgICAgIGlmKGE+Yikgc3dhcChhLGIpOwogICAgICAgICAgICAgICAgICAgIGlmKChzLmNvdW50KHthLGJ9KT09MCkmJihhIT1iKSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHg9dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgcy5pbnNlcnQoe2EsYn0pOwogICAgICAgICAgICAgICAgICAgICAgICBjb3V0PDx2W2FdPDwiICI8PHZbYl08PCJcbiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQogICAgICAgICAgICBjb3V0PDwiXG4iOwoKICAgICAgICB9CiAgICB9CiAgICBpZih0PT05KXsKICAgICAgICBmb3IoaW50IHE9MDsgcTxjO3ErKyl7CiAgICAgICAgICAgIGludCBuOwogICAgICAgICAgICBjaW4+Pm47CiAgICAgICAgICAgIGNvdXQ8PG48PCIgIjw8bi0xPDwiXG4iOwogICAgICAgICAgICBpZihuPT0xKXsKICAgICAgICAgICAgICAgIGNvdXQ8PCJcbiI7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2ZWN0b3I8aW50PiB2IChuKzEpOwogICAgICAgICAgICBmb3IoaW50IGk9MTtpPG4rMTtpKyspewogICAgICAgICAgICAgICAgdltpXT1pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzaHVmZmxlKHYuYmVnaW4oKSsxLHYuZW5kKCksZ2VuKTsKCiAgICAgICAgICAgIGludCBhPTE7CiAgICAgICAgICAgIHdoaWxlKDIqYS0xPG4pewogICAgICAgICAgICAgICAgYSo9MjsKICAgICAgICAgICAgfS8vMmEgZ2VxIG4KCiAgICAgICAgICAgIHZlY3Rvcjxib29sPiBsb3MgKGEpOwogICAgICAgICAgICBmb3IoaW50IGk9MDsgaTxuLWErMTtpKyspewogICAgICAgICAgICAgICAgbG9zW2ldPTE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2h1ZmZsZShsb3MuYmVnaW4oKSxsb3MuZW5kKCksZ2VuKTsKCiAgICAgICAgICAgIHZlY3RvcjxpbnQ+IHRyZWUgKDIqYSk7CiAgICAgICAgICAgIGZvcihpbnQgaT0xOyBpPD1hLTE7aSsrKXsKICAgICAgICAgICAgICAgIHRyZWVbaV09aTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbnQgaz1hOwogICAgICAgICAgICBmb3IoaW50IGk9YTtpPDIqYTtpKyspewogICAgICAgICAgICAgICAgaWYobG9zW2ktYV0pewogICAgICAgICAgICAgICAgICAgIHRyZWVbaV09azsKICAgICAgICAgICAgICAgICAgICBrKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCgogICAgICAgICAgICAvLyAgICAgICAgICAgIGZvcihpbnQgaT0yO2k8YTtpKyspewogICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgaW50IGU9aS8yOwogICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgY291dDw8dltlXTw8IiAiPDx2W2ldPDwiXG4iOwogICAgICAgICAgICAvLwogICAgICAgICAgICAvLyAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gICAgICAgICAgICBmb3IoaW50IGk9YTtpPDIqYTtpKyspewogICAgICAgICAgICAvLyAgICAgICAgICAgICAgICBpZihsb3NbaS1hXSl7CiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBpbnQgZT1pLzI7CiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBjb3V0PDx2W2VdPDwiICI8PHZbdHJlZVtpXV08PCJcbiI7CiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gICAgICAgICAgICB9CiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vICAgICAgICAgICAgY291dDw8IlxuXG5cbiI7CiAgICAgICAgICAgIGZvcihpbnQgaT0yO2k8bisxO2krKyl7CiAgICAgICAgICAgICAgICBpbnQgZT1pLzI7CiAgICAgICAgICAgICAgICAgICAgaWYoZ2VuX2lucmFuZ2UoMCwxKT09MSl7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQ8PGU8PCIgIjw8aTw8IlxuIjsKICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgY291dDw8aTw8IiAiPDxlPDwiXG4iOwogICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICB9Ci8vICAgICAgICAgICAgZm9yKGludCBpPWE7aTwyKmE7aSsrKXsKLy8gICAgICAgICAgICAgICAgaWYobG9zW2ktYV0pewovLyAgICAgICAgICAgICAgICAgICAgaW50IGU9aS8yOwovLyAgICAgICAgICAgICAgICAgICAgaWYoZ2VuX2lucmFuZ2UoMCwxKT09MSl7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgY291dDw8ZTw8IiAiPDx0cmVlW2ldPDwiXG4iOwovLyAgICAgICAgICAgICAgICAgICAgfWVsc2V7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgY291dDw8dHJlZVtpXTw8IiAiPDxlPDwiXG4iOwovLyAgICAgICAgICAgICAgICAgICAgfQovLwovLyAgICAgICAgICAgICAgICB9Ci8vICAgICAgICAgICAgfQovLyAgICAgICAgICAgIGNvdXQ8PCJcbiI7CgogICAgICAgIH0KICAgIH0KICAgIGlmKHQ9PTEwKXsKICAgICAgICBmb3IoaW50IGk9MDtpPGM7aSsrKXsKICAgICAgICAgICAgaW50IG4sbSxrOwogICAgICAgICAgICBjaW4+Pm4+Pm0+Pms7CiAgICAgICAgICAgIHZlY3RvcjxpbnQ+IHJlcCAobik7Ly8vLy8vaW5kZWtzIHJlcHJlemVudGFudGEgKDBfX19rLTEpCiAgICAgICAgICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gaW5kZWtzeSAoayk7CiAgICAgICAgICAgIHZlY3RvcjxzZXQ8cGFpcjxpbnQsaW50Pj4+IGtyYXdlZHppZSAoayk7CiAgICAgICAgICAgIGludCBsaWN6a3Jhdz0wOwogICAgICAgICAgICBmb3IoaW50IGk9MDtpPDIqaztpKyspewogICAgICAgICAgICAgICAgcmVwW2ldPWklazsKICAgICAgICAgICAgICAgIGluZGVrc3lbcmVwW2ldXS5wdXNoX2JhY2soaSk7CiAgICAgICAgICAgICAgICBpZihpPj1rKXsKICAgICAgICAgICAgICAgICAgICBrcmF3ZWR6aWVbcmVwW2ldXS5pbnNlcnQoe2ktayxpfSk7CiAgICAgICAgICAgICAgICAgICAgbGljemtyYXcrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IoaW50IGk9MiprOyBpPG47IGkrKyl7CiAgICAgICAgICAgICAgICByZXBbaV09Z2VuX2lucmFuZ2UoMCxrLTEpOwogICAgICAgICAgICAgICAgaW50IGluZHBvbCA9IGdlbl9pbnJhbmdlKDAsaW5kZWtzeVtyZXBbaV1dLnNpemUoKS0xKTsKICAgICAgICAgICAgICAgIGluZGVrc3lbcmVwW2ldXS5wdXNoX2JhY2soaSk7CiAgICAgICAgICAgICAgICBrcmF3ZWR6aWVbcmVwW2ldXS5pbnNlcnQoe2luZGVrc3lbcmVwW2ldXVtpbmRwb2xdLGl9KTsKICAgICAgICAgICAgICAgIGxpY3prcmF3Kys7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHdoaWxlKGxpY3prcmF3PG0pewogICAgICAgICAgICAgICAgaW50IHNwb2puYT1nZW5faW5yYW5nZSgwLGstMSk7CiAgICAgICAgICAgICAgICBpbnQgbWFrcyA9aW5kZWtzeVtzcG9qbmFdLnNpemUoKS0xOwogICAgICAgICAgICAgICAgaW50IGE9Z2VuX2lucmFuZ2UoMCxtYWtzKTsKICAgICAgICAgICAgICAgIGludCBiPWdlbl9pbnJhbmdlKDAsbWFrcyk7CiAgICAgICAgICAgICAgICBpZihhPT1iKSBjb250aW51ZTsKICAgICAgICAgICAgICAgIGEgPSBpbmRla3N5W3Nwb2puYV1bYV07IGIgPSBpbmRla3N5W3Nwb2puYV1bYl07CiAgICAgICAgICAgICAgICBpZihiPGEpIHN3YXAoYSxiKTsKICAgICAgICAgICAgICAgIGludCB0ZW1wID0ga3Jhd2VkemllW3Nwb2puYV0uc2l6ZSgpOwogICAgICAgICAgICAgICAga3Jhd2VkemllW3Nwb2puYV0uaW5zZXJ0KHthLGJ9KTsKICAgICAgICAgICAgICAgIGlmKGtyYXdlZHppZVtzcG9qbmFdLnNpemUoKT50ZW1wKXsKICAgICAgICAgICAgICAgICAgICBsaWN6a3JhdysrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvdXQ8PG48PCIgIjw8bSA8PCIgIjw8azw8IlxuIjsKICAgICAgICAgICAgdmVjdG9yPGludD4gdiAobik7CiAgICAgICAgICAgIGZvcihpbnQgaT0wO2k8bjtpKyspewogICAgICAgICAgICAgICAgdltpXT1pKzE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2h1ZmZsZSh2LmJlZ2luKCksdi5lbmQoKSxnZW4pOwoKICAgICAgICAgICAgZm9yKGludCBpPTA7IGk8azsgaSsrKXsKICAgICAgICAgICAgICAgIGZvcihhdXRvIFt4LHldOmtyYXdlZHppZVtpXSl7CiAgICAgICAgICAgICAgICAgICAgaWYoZ2VuX2lucmFuZ2UoMCwxKT09MSl7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQ8PHZbeF08PCIgIjw8dlt5XTw8IlxuIjsKICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgY291dDw8dlt5XTw8IiAiPDx2W3hdPDwiXG4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgY291dDw8IlxuIjsKCiAgICAgICAgfQoKCiAgICB9Cn0KCgoK