Join The Future
시간 제한5초메모리 제한64 MB
부분 구간 합의 홀짝 조건과 각 원소의 상하한이 주어질 때, 조건을 만족하는 배열의 개수를 세고 사전순으로 가장 작은 배열을 출력합니다.
문제
장 교수는 정수 개로 이루어진 배열을 갖고 있다. 그는 이 배열에 대한 관찰 결과를 종이에 적어 둔다. 각 관찰은 정수 세 개 , , 로 주어지며, 배열의 구간 에 있는 원소의 합을 2로 나눈 나머지가 와 같다는 뜻이다.
장 교수는 이 관찰 결과만으로 배열을 복원하려 한다. 조건을 만족하는 배열은 여러 개일 수 있으므로, 장 교수는 배열의 각 정수가 가질 수 있는 하한과 상한을 정하기로 한다.
관찰 결과와 각 정수의 하한, 상한이 주어졌을 때, 가능한 배열의 개수와 사전순으로 가장 앞서는 배열을 구하라.
입력
입력에는 여러 개의 테스트 케이스가 들어 있다. 첫 줄에는 테스트 케이스의 수 가 주어진다. 각 테스트 케이스는 다음과 같다.
첫 줄에는 정수 과 이 주어진다 (, ). 은 배열의 길이이고, 은 관찰 결과의 개수이다.
이어서 개의 줄에 정수 와 가 주어진다 (). 번째 정수의 하한과 상한이다.
이어서 개의 줄에 정수 , , 가 주어진다 (, ). 번째 관찰 결과이다.
테스트 케이스는 최대 110개이며, 전체 입력 크기는 30KiB 이하이다.
출력
각 테스트 케이스마다 첫 줄에는 가능한 배열의 개수를 로 나눈 나머지로 출력한다. 둘째 줄에는 사전순으로 가장 앞서는 배열을 출력한다. 조건을 만족하는 배열이 없으면 둘째 줄에 "-1"을 출력한다.