#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";

        }


    }
}



