K-균등 문자열

길이 N인 0과 1 문자열 중, 주어진 M개 구간 각각에서 길이 K인 모든 연속 부분 문자열이 같은 개수의 1을 갖는 문자열의 수를 1,000,000,007로 나눈 나머지로 구한다.

어려움8동적 계획법조합론수학누적 합아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

0과 1로 이루어진 문자열에서 길이가 KK인 연속 부분문자열을 모두 살펴봤을 때 그 안에 들어 있는 1의 개수가 전부 같으면, 이 문자열을 KK-균등하다고 하자.

예를 들어 문자열 100110은 4-균등하다. 길이가 4인 연속 부분문자열은 1001, 0011, 0110 세 개인데 셋 다 1을 두 개씩 담고 있기 때문이다.

온조는 0과 1로 이루어진 길이 NN의 문자열을 만들려고 한다. 온조에게는 좋아하는 구간 MM개와 좋아하는 수 MM개가 있다. ii번째 구간은 LiL_i번째 문자부터 RiR_i번째 문자까지의 부분문자열을 뜻하고, ii번째 수는 KiK_i이다. 온조는 ii번째 구간에 해당하는 부분문자열이 KiK_i-균등하기를 원한다. KiK_iii번째 구간의 길이보다 크지 않다.

온조가 만들 수 있는 문자열의 개수를 구하여라. 수가 커질 수 있으니 1,000,000,007로 나눈 나머지를 출력한다.

입력

첫째 줄에 NNMM이 주어진다. (1N10001 \le N \le 1000, 0M10000 \le M \le 1000)

이어지는 MM개 줄 중 ii번째 줄에 LiL_i, RiR_i, KiK_i가 주어진다. (1LiRiN1 \le L_i \le R_i \le N, 1KiRiLi+11 \le K_i \le R_i - L_i + 1)

출력

첫째 줄에 온조가 만들 수 있는 문자열의 개수를 1,000,000,007로 나눈 나머지를 출력한다.

힌트

첫 번째 예제에서 만들 수 있는 문자열은 00000, 00001, 01010, 01011, 10100, 10101, 11110, 11111의 여덟 가지이다.

두 번째 예제에는 온조가 좋아하는 구간도 수도 없으므로 길이 NN의 문자열을 아무렇게나 만들어도 된다. 즉 210002^{1000}가지를 만들 수 있다.