XORequation
문제 정보
-
- 문제 ID
- 시간 제한
- 메모리 제한
- 제출 횟수
- 정답 횟수 (비율)
-
- XOREQUATION
- 5000ms
- 65536kb
- 60
- 9 (15%)
-
- 출처
- 분류
문제
태윤이는 \(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 |
