만드는 중입니다

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

Join The Future

시간 제한5초메모리 제한64 MB

요약
부분 구간 합의 홀짝 조건과 각 원소의 상하한이 주어질 때, 조건을 만족하는 배열의 개수를 세고 사전순으로 가장 작은 배열을 출력합니다.
난이도

어려움10점 중 8점

유형
유니온 파인드, 그리디, 조합론
정답자
아직 제출이 없습니다

문제

장 교수는 정수 nn개로 이루어진 배열을 갖고 있다. 그는 이 배열에 대한 관찰 결과를 종이에 적어 둔다. 각 관찰은 정수 세 개 lil_i, rir_i, sis_i로 주어지며, 배열의 구간 [li,ri][l_i, r_i]에 있는 원소의 합을 2로 나눈 나머지가 sis_i와 같다는 뜻이다.

장 교수는 이 관찰 결과만으로 배열을 복원하려 한다. 조건을 만족하는 배열은 여러 개일 수 있으므로, 장 교수는 배열의 각 정수가 가질 수 있는 하한과 상한을 정하기로 한다.

관찰 결과와 각 정수의 하한, 상한이 주어졌을 때, 가능한 배열의 개수와 사전순으로 가장 앞서는 배열을 구하라.

입력

입력에는 여러 개의 테스트 케이스가 들어 있다. 첫 줄에는 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스는 다음과 같다.

첫 줄에는 정수 nn과 mm이 주어진다 (1≤n≤401 \le n \le 40, 0≤m≤n(n+1)20 \le m \le \frac{n(n+1)}{2}). nn은 배열의 길이이고, mm은 관찰 결과의 개수이다.

이어서 nn개의 줄에 정수 xix_i와 yiy_i가 주어진다 (0≤xi≤yi≤1090 \le x_i \le y_i \le 10^9). ii번째 정수의 하한과 상한이다.

이어서 mm개의 줄에 정수 lil_i, rir_i, sis_i가 주어진다 (1≤li≤ri≤n1 \le l_i \le r_i \le n, 0≤si≤10 \le s_i \le 1). ii번째 관찰 결과이다.

테스트 케이스는 최대 110개이며, 전체 입력 크기는 30KiB 이하이다.

출력

각 테스트 케이스마다 첫 줄에는 가능한 배열의 개수를 109+710^9 + 7로 나눈 나머지로 출력한다. 둘째 줄에는 사전순으로 가장 앞서는 배열을 출력한다. 조건을 만족하는 배열이 없으면 둘째 줄에 "-1"을 출력한다.

예제1

  1. 예제 1

    입력
    3
    3 3
    1 10
    0 21
    3 15
    2 2 1
    3 3 0
    2 3 1
    3 0
    0 1
    1 3
    3 4
    3 3
    1 10
    0 21
    3 3
    2 2 1
    3 3 0
    2 3 1
    
    예상 출력
    660
    1 1 4
    12
    0 1 3
    0
    -1