삼각 관계

일부 쌍의 좋아함/싫어함이 정해진 그래프에서, 좋아하는 쌍이 정확히 두 개인 삼중조가 생기지 않도록 나머지 쌍을 채우는 경우의 수를 센다.

어려움8그래프조합론유니온 파인드수학아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

많은 드라마와 영화에 "삼각 관계"가 나온다. 인물 A와 인물 B가 서로 좋아하고, 인물 B와 인물 C가 서로 좋아하지만, 인물 A와 인물 C는 서로 싫어하는 관계다. 편의상 모든 인물 쌍은 서로 좋아하거나 서로 싫어한다고 가정한다. 중립인 관계는 없고, 관계가 정해지지 않은 쌍도 없으며, A는 B를 좋아하지만 B는 A를 싫어하는 한쪽만의 관계도 없다. 따라서 n(n1)/2n(n-1)/2개의 모든 쌍에 대해 좋아하는지 싫어하는지가 하나로 정해진다.

인물 nn명이 나오는 드라마를 생각하자. Alice는 지금까지의 전개에서 인물 쌍 mm개의 관계를 알고 있다. Alice는 진부한 삼각 관계에 지쳐서 이번 드라마에는 삼각 관계가 없기를 바란다. 인물이 모두 서로 싫어하는 것도 바라지 않아서, 어떤 세 명을 골라도 그중 적어도 한 쌍은 서로 좋아하기를 바란다. 즉 임의의 세 인물 A, B, C에 대해 A-B, B-C, C-A 중 정확히 한 쌍만 서로 좋아하거나, 세 쌍 모두 서로 좋아해야 한다.

Alice는 아직 모르는 쌍을 채워 예상 관계도를 그려 보려 했지만, 조건을 만족하는 관계도가 너무 많아 전부 그리기를 포기했다. 대신 조건을 만족하는 관계도의 개수를 세려고 한다. 이미 알려진 관계 mm개가 주어질 때, 남은 쌍의 관계를 채우는 방법의 수를 출력하라.

입력

첫째 줄에 인물의 수 nn과 이미 알려진 관계의 수 mm이 주어진다. (3n1000003 \le n \le 100\,000, 0m1000000 \le m \le 100\,000, mn(n1)/2m \le n(n-1)/2)

다음 mm개의 줄에 관계가 한 줄에 하나씩 주어진다. ii번째 줄에는 자연수 aia_i, bib_i, cic_i가 주어진다. cic_i가 1이면 aia_ibib_i는 서로 좋아하는 관계이고, cic_i가 0이면 서로 싫어하는 관계다. (1aibin1 \le a_i \ne b_i \le n, cic_i는 0 또는 1)

같은 쌍은 최대 한 번만 주어진다. (ai,bi)(a_i, b_i)가 주어졌다면 (bi,ai)(b_i, a_i)는 입력에 없다.

출력

남은 쌍의 관계를 채우는 방법의 수를 10000000071\,000\,000\,007(109+710^9 + 7)로 나눈 나머지를 한 줄에 출력한다.