고장 난 로봇

각 노드에서 나가는 강제 이동 간선이 최대 하나인 방향 그래프에서, 로봇이 규칙을 많아야 한 번 어기면서 이동할 때 최종적으로 멈출 수 있는 노드의 수를 구한다.

보통6그래프DFS시뮬레이션완전 탐색면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

앨리스는 수업 과제로 로봇이 그래프를 탐색하도록 프로그래밍했다. 그래프에는 1,2,,n1, 2, \dots, n으로 번호가 붙은 정점 nn개와 방향 간선 mm개가 있고, 로봇은 정점 1에서 출발한다.

한 정점에서 나가는 간선은 여러 개일 수 있다. 앨리스는 정점마다 이웃 하나를 강제 이동 대상으로 지정해 둘 수 있다. 예를 들어 정점 5에서 이웃 1, 4, 6으로 나가는 간선이 있더라도 앨리스가 강제 이동을 4로 지정했다면, 로봇은 5를 떠날 때 4로 가야 한다.

로봇이 정상이라면 강제 이동이 지정된 정점에서는 언제나 그 이동을 따르고, 강제 이동이 없는 정점에 도착하면 멈춘다. 그런데 이 로봇에는 결함이 있어서 규칙을 어기고 그 정점의 이웃 중 아무 곳으로나 이동하기도 한다. 그 정점에 강제 이동이 지정되어 있든 없든 마찬가지다. 이런 오작동은 많아야 한 번 일어나고, 한 번도 일어나지 않기도 한다.

앨리스는 로봇을 디버깅하다 막혔다. 로봇이 더 이상 움직이지 않고 멈출 수 있는 정점이 어디인지 알아내 앨리스를 도와주자.

그림 1과 그림 2는 예제 그래프 두 개다. 빨간 화살표는 강제 이동에 해당하는 간선이고, 검은 화살표는 그 밖의 간선이다. 정점을 감싼 원이 빨간색이면 로봇이 멈출 수 있는 정점이다.

그림 1: 첫 번째 예제 그래프.그림 2: 두 번째 예제 그래프.

첫 번째 그래프에서 오작동이 없으면 로봇은 정점 1, 5, 4를 끝없이 돈다. 오작동으로 1에서 2로 건너뛸 수 있는데, 오작동은 이 한 번뿐이므로 로봇은 2에서 더 움직이지 않는다. 5에서 6으로 건너뛴 다음 강제 이동을 따라 7에서 멈출 수도 있다.

두 번째 그래프에는 강제 이동이 없으므로, 오작동이 없으면 로봇은 1에 그대로 머문다. 오작동으로 1에서 2나 3으로 갈 수도 있고, 그러면 그 자리에서 멈춘다.

입력

첫째 줄에 정점의 개수 nn과 간선의 개수 mm이 주어진다. (1n10001 \le n \le 1000, 0m100000 \le m \le 10000)

다음 mm개 줄에는 각각 두 정수 aabb가 주어진다. (1a,bn1 \le |a|, b \le n, ab|a| \ne b) a>0a > 0이면 정점 aa에서 정점 bb로 가는, 강제 이동이 아닌 방향 간선이 있다. a<0a < 0이면 정점 a-a에서 정점 bb로 가는 강제 이동 간선이 있다. 강제 이동은 많아야 900개다. 같은 방향 간선이 두 번 주어지는 일은 없고, 강제 이동의 시작 정점도 서로 다르다.

출력

로봇이 멈출 수 있는 정점의 개수를 출력한다.