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 |