42 lines
No EOL
774 B
Python
42 lines
No EOL
774 B
Python
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) |