#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <map>

FILE *fin = fopen("comanda.in", "r"), *fout = fopen("grader_test1.in", "w");

#define EPS 0.000001

#define MAXN 5000

int n, cnt, X[MAXN], Y[MAXN];
std::map < long long, bool > cercuri;

inline int arie(int xa, int ya, int xb, int yb, int xc, int yc) {
    return xa * yb - xb * ya + xb * yc - xc * yb + xc * ya - xa * yc;
}

inline long long getcerc(int xa, int ya, int xb, int yb, int xc, int yc) {
    int bx = xb - xa, by = yb - ya, cx = xc - xa, cy = yc - ya;
    int B = bx * bx + by * by, C = cx * cx + cy * cy, D = bx * cy - by * cx;
    double X = (1LL * cy * B - 1LL * by * C) / (2.0 * D) + xa, Y = (1LL * bx * C - 1LL * cx * B) / (2.0 * D) + ya;
    double R = (X - xa) * (X - xa) + (Y - ya) * (Y - ya);

    long long ans = floor(X + EPS);
    ans <<= 15;
    ans += floor(Y + EPS);
    ans <<= 15;
    ans += floor(R + EPS);

    return ans;
}

inline bool punct(int a, int b) {
    for (int i = 0; i < cnt; i++)
        if (a == X[i] && b == Y[i])
            return 0;
    return 1;
}

inline bool linie(int a, int b) {
    for (int i = 0; i < cnt; i++)
        for (int j = 0; j < i; j++)
            if (arie(a, b, X[i], Y[i], X[j], Y[j]) == 0)
             return 0;
    return 1;
}

inline bool cerc(int a, int b) {
    for (int i = 0; i < cnt; i++)
        for (int j = 0; j < i; j++)
            if (cercuri[getcerc(a, b, X[i], Y[i], X[j], Y[j])])
                return 0;
    return 1;
}

inline void baga(int a, int b) {
    fprintf(fout, "%d %d\n", a, b);
    for (int i = 0; i < cnt; i++)
        for (int j = 0; j < i; j++)
            cercuri[getcerc(a, b, X[i], Y[i], X[j], Y[j])] = 1;
}

inline void solve() {
    int k = n - (1LL * rand() * rand()) % (n - 2);
    fprintf(fout, "%d %d\n", n, k);

    while (cnt < n) {
        int x, y;
        if (cnt % 2) {
            x = 1LL * rand() * rand() % 10000 + 1;
            y = 1LL * rand() * rand() % 10000 + 1;
        } else {
            x = 10000 - 1LL * rand() * rand() % 10000;
            y = 10000 - 1LL * rand() * rand() % 10000;
        }

        if (punct(x, y) && linie(x, y) && cerc(x, y)) {
            X[cnt] = x;
            Y[cnt] = y;
            baga(x, y);
            cnt++;
            //printf("%d\n", cnt);
        }
    }

    cercuri.clear();
    cnt = 0;
}

int main() {
    srand(time(0));

    int t;
    fscanf(fin, "%d%d", &t, &n);

    fprintf(fout, "%d\n", t);

    for (; t; t--)
        solve();

    return 0;
}
