페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#4028

제3회 디미고 프로그래밍 챌린지 오픈 콘테스트

가계도 1초 1024MB

문제

2025년 3월, 노을이 아름답던 어느 날. 수아는 도서관에서 빌려온 가계도들 위에 라면 국물을 엎질러버렸다. 수아는 급히 헤어드라이어를 동원해 가계도들을 말리긴 했지만... 불행히도, 인물들의 성별을 나타내던 수성 잉크가 전부 지워지고 말았다.

수아가 빌려온 가계도는 아래의 특징을 가지고 있다.

  • 임의의 구성원의 성별은 남성이거나 여성이다.

  • 각 구성원은 자신의 성별과 다른 성별의 사람과 결혼 할 수 있다.

  • 어떠한 구성원 p의 조상은 아래와 같이 귀납적으로 정의된다.

    1. p의 부모는 p의 조상이다.

    2. p의 부모의 조상 또한 P의 조상이다.

    p 자신은 p의 조상이 아님에 유의하라.

  • 반대로 어떠한 구성원 p의 후손은 p를 조상으로 가지는 구성원들이다.

  • 임의의 두 구성원 pq에 대해, pq의 조상이면서 후손일 수는 없다.

수아는 가계도를 복구하는 과정에서 위의 특징을 모두 만족하면 유효한 가계도라 하기로 하였다. 수아는 인물들의 성별을 하나하나 복구하기엔 너무 귀찮다고 생각하여, 각 구성원의 성별을 적절히 배정하여 유효한 가계도의 개수를 세어보기로 했다. 수아를 도와 유효한 가계도를 만드는 성별 배정의 총 가짓수를 구하는 프로그램을 작성해 보자.


입력

첫 번째 줄에 가계도에 등장하는 구성원의 수 N과 부모-자식 관계의 수 M이 공백으로 구분하여 주어진다. (3≤N≤10000,\ 1≤M≤N)

두 번째 줄부터 M개의 줄에 걸쳐 i번째 줄에는 A_i,\ B_i,\ C_i가 공백으로 구분하여 주어진다. 이는 C_i의 부모가 A_iB_i임을 의미한다. (3≤N≤10,000;\ 1≤M≤N, 주어지는 모든 C_i는 다르며, 각 관계에서의 A_i,\ B_i,\ C_i는 서로 다르다)


출력

유효한 가계도를 성별 배정의 총 가짓수를 출력한다. 단, 값이 너무 커질 수 있으니 10^9+7로 나눈 나머지를 출력한다.


예제 #1

6 4
1 2 3
2 3 4
3 4 5
4 5 6
4

예제 #2

8 4
1 2 5
2 3 6
3 4 7
4 1 8
32

예제 #3

10 4
1 3 4
3 4 1
3 9 2
1 9 3
0

예제 #4

12 7
1 2 6
2 3 7
3 4 8
4 5 9
1 9 10
5 7 11
10 11 12
32

예제 #5

4 2
1 2 3
1 3 2
0
로그인해야 코드를 작성할 수 있어요.