g = [[] for _ inrange(n)] ideg = [0] * n odeg = [0] * n for _ inrange(m): u, v = map(lambda x: int(x) - 1, input().split()) g[u].append(v) odeg[u] += 1 ideg[v] += 1
# f[u] 表示從一個入度為0的點出發,到達u的路徑數 f = [0] * n q = deque() for u inrange(n): if ideg[u] == 0: f[u] = 1 q.append(u)
while q: u = q.popleft() for v in g[u]: ideg[v] -= 1 f[v] = (f[v] + f[u]) % MOD if ideg[v] == 0: q.append(v)
ans = 0 for u inrange(n): if odeg[u] == 0: ans = (ans + f[u]) % MOD print(ans)
g = [[] for _ inrange(n)] ideg = [0] * n odeg = [0] * n for _ inrange(m): u, v = map(lambda x: int(x) - 1, input().split()) g[u].append(v) odeg[u] += 1 ideg[v] += 1
# dfs(u) 表示從u出發,到達一個出度為0的點的路徑數 @cache defdfs(u: int) -> int: if odeg[u] == 0: return1 res = 0 for v in g[u]: res += dfs(v) return res
ans = 0 for u inrange(n): if ideg[u] == 0: ans = (ans + dfs(u)) % MOD print(ans)