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 |
