import sys from collections import deque, defaultdict import heapq import copy ###################################################################### #UnionFind class UnionFind(): def __init__(self, n): self.n = n self.parents = [-1] * n self.group = n def find(self, x): if self.parents[x] < 0: return x else: self.parents[x] = self.find(self.parents[x]) return self.parents[x] def union(self, x, y): x = self.find(x) y = self.find(y) if x == y: return if self.parents[x] > self.parents[y]: x, y = y, x self.parents[x] += self.parents[y] self.parents[y] = x self.group -= 1 def size(self, x): return -self.parents[self.find(x)] def same(self, x, y): return self.find(x) == self.find(y) def members(self, x): root = self.find(x) return [i for i in range(self.n) if self.find(i) == root] def roots(self): return [i for i, x in enumerate(self.parents) if x < 0] def group_count(self): return self.group def all_group_members(self): return {r: self.members(r) for r in self.roots()} def __str__(self): return ' '.join('{}: {}'.format(r, self.members(r)) for r in self.roots()) ###################################################################### DEBUG = 0 if __name__ != "__main__": DEBUG = 1 import DebugLib as dl def MyInput(): global DEBUG if DEBUG: return dl.DebugInput() else: return input() def MyPrint(*arg, **keys): global DEBUG if DEBUG: return dl.DebugPrint(*arg, **keys) else: return print(*arg, **keys) ###################################################################### def InputInfo(): ar = list(map(int,MyInput().split())) n = ar[0] s = ar[1:] return n,s def OutputAns(): MyPrint(len(outInfo)) for ar in outInfo: MyPrint(*ar) if not DEBUG: sys.stdout.flush() N = 5400 T, R = map(int,MyInput().split()) uf = UnionFind(N+1) q = [] idx = 1 nowidx = 1 for t in range(T): n, s = InputInfo() outInfo = [] for x in s: if idx == 1: idx += 1 continue while R <= uf.size(nowidx): nowidx += 1 uf.union(idx, nowidx) outInfo.append([idx, nowidx]) idx += 1 OutputAns()