ICPC 팀 구성

3N명 학생을 3명씩 N팀으로 나누면서 M개의 같은 팀 및 다른 팀 조건을 모두 만족하는 경우의 수를 1e9+9로 나눈 나머지를 구합니다.

어려움8조합론유니온 파인드백트래킹아직 제출이 없습니다시간 제한3초메모리 제한256 MB

문제

당신은 대학 ICPC 동아리의 코치다. 동아리에는 학생 3N3N명이 있고, 다음 ICPC에 내보낼 팀 NN개를 만들어야 한다. ICPC의 모든 팀은 3명으로 이루어지고, 각 학생은 정확히 한 팀에 속한다.

팀을 짤 때는 학생 사이의 관계를 여러 가지 고려해야 한다. 사이가 아주 좋은 두 학생이 같은 팀이 되면 성적이 눈에 띄게 오른다. 사이가 나쁜 두 학생이 같은 팀이 되면 그 반대의 일이 벌어진다. 그래서 사이가 좋은 두 학생은 반드시 같은 팀에 넣고, 사이가 나쁜 두 학생은 반드시 다른 팀에 넣는다. 코치인 당신은 학생 사이의 관계 MM개를 모두 알고 있다.

조건을 모두 만족하는 팀 구성이 몇 가지인지 세는 프로그램을 작성하라. 두 팀 구성은 어떤 두 학생이 한쪽에서는 같은 팀이고 다른 쪽에서는 다른 팀일 때, 그리고 그때만 서로 다르다고 본다.

입력

첫째 줄에 정수 NNMM이 주어진다 (1N1061 \le N \le 10^6, 1M181 \le M \le 18). 이어지는 MM개 줄 중 ii번째 줄에는 정수 AiA_i, BiB_i (1Ai,Bi3N1 \le A_i, B_i \le 3N, AiBiA_i \ne B_i)와 CiC_i (Ci{0,1}C_i \in \{0, 1\})가 주어진다. AiA_iBiB_i는 학생의 번호이고, CiC_i는 관계의 종류다. CiC_i가 0이면 AiA_i번 학생과 BiB_i번 학생은 사이가 좋고, 1이면 사이가 나쁘다. iji \ne j인 모든 1i,jM1 \le i, j \le M에 대해 {Ai,Bi}{Aj,Bj}\{A_i, B_i\} \ne \{A_j, B_j\}가 성립한다.

출력

조건을 만족하는 팀 구성의 수를 109+910^9 + 9로 나눈 나머지를 한 줄에 출력한다.