XORequation

문제 정보

문제

태윤이는 0 또는 1로 이루어진 길이 N짜리의 수열 A를 가지고 있었다. 그러나 태윤이는 수열 A의 각 원소가 무엇인지 까먹어 버렸다. 다행히도, 태윤이는 수열에 관한 몇 가지 정보를 기억하고 있었다. 각 정보는 i,j,x 의 순서로 이루어져 있으며, A_i XOR A_{i+1} XOR ⋯ XOR A_j = x라는 식이 성립한다는 것을 의미한다. 태윤이는 이 정보들로부터 만들어 낼 수 있는 수열의 경우의 수가 몇 개인지 알고 싶어 졌다. 여러분이 태윤이를 도와서 가능한 A의 경우의 수를 세어주자. 단, 수가 너무 클 수 있으니 1,000,000,007로 나눈 나머지를 구해야 한다.

입력

첫 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스의 첫 줄에 수열의 길이 N(1 \le N \le 300,000), 정보의 개수 M(0 \le M \le 100,000)이 주어지며, 두 번째 줄부터는 M개의 줄에 걸쳐서 정보를 나타내는 정수 3개 i, j, x (1 \le i \le j \le N, 0 \le x \le 1)이 순서대로 주어진다

출력

각 테스트 케이스 마다 가능한 수열의 경우의 수를 1,000,000,007로 나눈 나머지를 출력한다. 만약, 태윤이의 정보가 부정확 하다면 –1을 출력한다.

예제 입력

2
3 2
1 2 1
2 3 0
3 3
1 3 0
1 2 0
3 3 1

예제 출력

2
-1

노트

#####예제 설명
첫 번째 예제의 경우 (1, 0, 0)과 (0, 1, 1) 두 가지의 수열이 존재한다

#####참고 : XOR operation

XOR operation 의 진리표는 다음과 같다. C나 Java에서는 ^ 라는 operator를 사용하면 알맞은 결과를 얻을 수 있다.

A B A XOR B
0 0 0
0 1 1
1 0 1
1 1 0

0개의 댓글이 있습니다.