import sys input_data = sys.stdin.read().split() n = int(input_data[0]) m = int(input_data[1]) graph = [[] for _ in range(n + 1)] ptr = 2 for i in range(1, n + 1): while True: val = int(input_data[ptr]) ptr += 1 if val == 0: break graph[i].append(val) matching = [0] * (m + 1) def dfs(v): if used[v]: return False used[v] = True for to in graph[v]: if matching[to] == 0 or dfs(matching[to]): matching[to] = v return True return False for i in range(1, n + 1): used = [False] * (n + 1) dfs(i) result = [] for to in range(1, m + 1): if matching[to] != 0: result.append((matching[to], to)) print(len(result)) for u, v in result: print(u, v)