만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

서로 아는 부부 쌍

시간 제한15초메모리 제한1024 MB

요약
남자와 여자 집합에 q번의 합치기 연산을 순서대로 적용합니다. 두 집합에서 모두 연결된 부부 쌍의 수에 i를 곱한 값의 합을 10^9+7로 나눈 나머지로 구합니다.
난이도

어려움10점 중 9점

유형
유니온 파인드, 트리, 수학
정답자
아직 제출이 없습니다

문제

마을 스피시스키 슈트보르톡에는 nn쌍의 부부가 살고 있다. 남자 nn명과 여자 nn명이 있으며, 두 집단 모두 1부터 nn까지 번호가 매겨져 있다. 모든 ii에 대해 남자 ii는 여자 ii와 결혼한 사이이다.

마을 술집에서 두 남자가 만나면 둘은 친구가 된다. 친구 관계는 영원히 유지된다. 두 남자는 친구이거나 공통으로 아는 사람이 있으면 서로 아는 사이이다. 남자 aa와 bb가 친구가 되면 둘은 서로 아는 사이가 되고, aa가 아는 모든 사람은 bb가 아는 모든 사람과 서로 알게 된다. 여자도 같은 규칙을 따른다.

부부 aa와 부부 bb가 친숙한 부부 쌍이라는 것은 남자 aa와 남자 bb가 서로 아는 사이이고, 여자 aa와 여자 bb도 서로 아는 사이라는 뜻이다.

처음에는 아무도 친구가 아니다. 이후 qq개의 사건이 순서대로 일어난다. 각 사건은 두 남자의 만남 또는 두 여자의 만남이다. 만난 두 사람이 아직 친구가 아니라면 친구가 된다. 매 사건 후에는 a≠ba \neq b인 쌍 a,ba, b 중에서 남자 aa와 남자 bb가 서로 아는 사이이고 여자 aa와 여자 bb도 서로 아는 사이인 쌍의 수를 센다. 쌍은 순서를 구분하지 않으므로 1,21, 2와 2,12, 1은 같은 쌍이다.

입력

첫 줄에는 테스트 케이스의 수 tt가 주어진다. 각 테스트 케이스 앞에는 빈 줄이 하나 있다.

각 테스트 케이스의 첫 줄에는 정수 nn과 qq가 주어진다. 이어지는 qq개의 줄 중 ii번째 줄에는 정수 tit_i, aia_i, bib_i가 주어진다 (1≤ti≤21 \le t_i \le 2, 1≤ai,bi≤n1 \le a_i, b_i \le n, ai≠bia_i \neq b_i). tit_i가 1이면 남자 aia_i와 남자 bib_i가 만나는 것이고, 2이면 여자 aia_i와 여자 bib_i가 만나는 것이다.

출력

각 테스트 케이스마다 사건 ii 이후의 친숙한 부부 쌍의 수를 yiy_i라 하고, zi=i⋅yiz_i = i \cdot y_i라 하자. z1+⋯+zqz_1 + \cdots + z_q를 109+710^9 + 7로 나눈 나머지를 한 줄에 출력한다.

힌트

사건 3 이후 부부 1과 부부 3은 친숙하다. 사건 5 이후에는 모든 부부가 서로 친숙하다. 따라서 합은 1⋅0+2⋅0+3⋅1+4⋅1+5⋅3=221 \cdot 0 + 2 \cdot 0 + 3 \cdot 1 + 4 \cdot 1 + 5 \cdot 3 = 22이다.

예제1

  1. 예제 1

    입력
    1
    
    3 5
    1 1 2
    2 1 3
    1 2 3
    1 3 1
    2 2 1
    
    예상 출력
    22