#include <bits/stdc++.h>
using namespace std;
const int lim = 1e8;
mt19937 rd(time(NULL));
int rnd(int L, int R) {
uniform_int_distribution<int> myrand(L, R);
return myrand(rd);
}
int f[10000];
int find (int x) {
if (f[x] == x) return x;
return f[x] = find(f[x]);
}
pair<int, int> e[10000];
map<pair<int, int>, int> mark;
int main() {
srand(time(0));
int n = 100, m = 120;
cout << n << ' ' << m << endl;
for (int i = 2; i <= n; i ++) {
int fa = rnd(1, i - 1);
cout << i << ' ' << fa <<endl;
mark[{fa, i}] = 2;
}
for (int i = 1; i <= m - n + 1; i ++) {
int u = rnd(1, n), v = rnd(1, n);
while (v == u || mark[{min(u, v), max(u, v)}]) u = rnd(1, n), v = rnd(1, n);
mark[{min(u, v), max(u, v)}] = 1;
e[i] = {u, v};
cout << u << ' ' << v << endl;
}
int q = 20;
while (q --) {
int op = rnd(0, 1);
int u = rnd(1, n), v = rnd(1, n);
if (op == 1) cout << op << ' ' << u << ' ' <<v <<endl;
else {
while (v == u || mark[{min(u, v), max(u, v)}] != 1) {
u = rnd(1, n), v = rnd(1, n);
}
mark[{min(u, v), max(u, v)}] = 0;
cout << op << ' ' << u << ' ' << v << endl;
}
}
cout << -1 << endl;
return 0;
}