func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long mx = 10000007;   using pii = pair<long long, long long>;   const long long mod = 1e9 + 7;   const double pi = acos(-1);   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     ;     long long t;     cin >> t;     while (t--) {       long long n;       cin >> n;       vector<pii> v;       vector<long long> ev, od;       set<long long> s;       for (long long i = 0; i < n; i++) {         s.insert(i + 1);         if ((i + 1) % 2 == 0)           ev.push_back(i + 1);         else           od.push_back(i + 1);       }       if (n == 2) {         cout << 2 << endl;         cout << 1 <<     << 2 << endl;         continue;       }       sort(ev.begin(), ev.end());       sort(od.begin(), od.end());       reverse(ev.begin(), ev.end());       reverse(od.begin(), od.end());       long long d;       if (n % 2 == 0) {         d = ev[0];         s.erase(d);         long long i = 1, j = 0;         while (1) {           if (d % 2 == 0) {             long long a = d;             long long b = ev[i];             s.erase(b);             v.push_back({a, b});             d = (a + b) / 2;             if (s.size() == 0) break;             i++;             if (i > ev.size()) break;           } else {             long long a = d;             long long b = od[j];             s.erase(b);             v.push_back({a, b});             j++;             d = (a + b) / 2;             if (s.size() == 0) break;             if (j > od.size()) break;           }           if (s.size() == 0) break;         }       } else if (n % 2 == 1) {         d = od[0];         s.erase(d);         long long i = 1, j = 0;         while (1) {           if (d % 2 == 1) {             long long a = d;             long long b = od[i];             s.erase(b);             v.push_back({a, b});             d = (a + b) / 2;             if (s.size() == 0) break;             i++;             if (i > od.size()) break;           } else {             long long a = d;             long long b = ev[j];             s.erase(b);             v.push_back({a, b});             j++;             d = (a + b) / 2;             if (s.size() == 0) break;             if (j > ev.size()) break;           }           if (s.size() == 0) break;         }       }       cout << d << endl;       for (long long i = 0; i < v.size(); i++) {         cout << v[i].first <<     << v[i].second << endl;       }     }     return 0;   }   