############################################################# import sys sys.setrecursionlimit(10**7) from heapq import heappop,heappush from collections import deque,defaultdict,Counter from bisect import bisect_left, bisect_right from itertools import product,combinations,permutations ipt = sys.stdin.readline def iin(): return int(ipt()) def lmin(): return list(map(int,ipt().split())) MOD = 998244353 ############################################################# N,M = lmin() ans = [[] for _ in range(N)] G = [[] for _ in range(N)] for _ in range(M): u,v = lmin() u,v = u-1,v-1 G[u].append(v) f = [0]*N for i in range(N): if len(G[i]) == 0: continue cur = i E = [] f[cur] = 1 while True: #print(cur,E,G) #print(f) if not G[cur]: if not E: break else: u,v = E.pop() ans[u].append(v) f[cur] = 0 cur = u else: nxt = G[cur].pop() if f[nxt]: tmp = cur f[cur] = 0 while True: u,v = E.pop() tmp = u if tmp == nxt: break f[tmp] = 0 cur = tmp else: f[nxt] = 1 E.append((cur,nxt)) cur = nxt f[i] = 0 print(N,sum(len(g) for g in ans)) for i in range(N): for j in ans[i]: print(i+1,j+1)