#include <bits/stdc++.h>
#define INT long long
#define MOD 1000000007
#define OO 99999998765432100
using namespace std;
INT n, dt[5001][5001];
struct JK{ INT x, y; } a[5050];
map<INT, map<INT, INT> > chk;
INT f(int p, int q)
{
    INT w = abs(a[p].x - a[q].x), h = abs(a[p].y - a[q].y);
    return w+h-__gcd(w,h);
}
INT dp(int p, int q)
{
    int r = max(p, q) + 1;
    if( r == n ) return f(q, n-1) + f(p, n-1);
    if( ~dt[p][q] ) return dt[p][q];
    INT &ret = dt[p][q] = OO;
    ret = min( dp(r, q) + f(p, r), dp(p, r) + f(q, r) );
    return ret;
}
INT random()
{
    INT ret = 0;
    for(int i = 0 ; i < 29 ; i++ )
        ret*=2, ret+=(rand()%2);
    return ret;
}
void gen(int x, int n)
{
    chk.clear();
    for(int i = 1 ; i <= n ; i++ )
    {
        INT p = random(), q = random();
        if( chk[p][q] )
        {
            i--;
            continue;
        }
        chk[p][q] = 1;
        cout<<p<<" "<<q<<endl;
    }
}
int main()
{
    ios::sync_with_stdio(false);
    srand(time(NULL));
/*    memset(dt, -1, sizeof(dt));
    cin>>n;
    for(int i = 1 ; i <= n ; i++ ) cin>>a[i].x>>a[i].y;
    n++;
    a[0].x = a[0].y = 0;
    sort(a, a+n, [](JK a, JK b){ return a.x < b.x; } );
    cout<<dp(0, 0);
*/
    for(int i = 6 ; i <= 20 ; i++ )
    {
        cin>>n;
        char fn[110];
        sprintf(fn, ".%d.in", i);
        freopen(fn, "w", stdout);
        cout<<n<<endl;
        gen(i, n);
    }
}

/*
8
1 4
8 5
2 2
3 3
4 7
5 6
6 8
7 1

5
5 0
15 0
20 0
22 0
10 0

6
6 1
5 3
4 3
3 0
2 2
1 0

*/
