// NOT YET DEBUGGED

#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
	int T; // T = 3600
	int R; // R = 4
	cin >> T >> R;
	vector<int> P, S;
	vector<int> rem;
	for (int iteration = 0; iteration < T; ++iteration) {
		int subn;
		cin >> subn;
		for (int j = 0; j < subn; ++j) {
			int x;
			cin >> x;
			P.push_back(iteration);
			S.push_back(x);
			rem.push_back(int(P.size()) - 1);
		}
		if ((iteration + 1) % 40 == 0) {
			sort(rem.begin(), rem.end(), [&](int j, int k) { return S[j] < S[k]; });
			vector<int> qu, qv;
			while (int(rem.size()) >= 4) {
				int v1 = rem.back(); rem.pop_back();
				int v2 = rem.back(); rem.pop_back();
				int v3 = rem.back(); rem.pop_back();
				int v4 = rem.back(); rem.pop_back();
				qu.push_back(v1); qv.push_back(v2);
				qu.push_back(v1); qv.push_back(v3);
				qu.push_back(v1); qv.push_back(v4);
			}
			cout << qu.size() << endl;
			for (int i = 0; i < int(qu.size()); ++i) {
				cout << qu[i] + 1 << ' ' << qv[i] + 1 << endl;
			}
		}
		else {
			cout << 0 << endl;
		}
	}
	return 0;
}