Q개의 구간 최솟값 조건을 모두 만족하는 1부터 N까지의 순열 개수를 10^9+7로 나눈 나머지로 구하고, 모순이면 0을 출력한다.
길이가 NNN인 배열이 있다. 배열은 1,2,…,N1, 2, \dots, N1,2,…,N의 순열을 담는다. 각 수는 배열에 정확히 한 번씩 나온다. 위치는 111부터 센다.
배열 내용은 알 수 없다. 대신 구간 최솟값을 묻는 질의 QQQ개의 답이 주어진다. 각 질의는 aaa번 위치부터 bbb번 위치까지 최소값을 묻는다.
모든 질의에 맞는 배열이 몇 개인지 구하는 것이 과제이다.
첫째 줄에 정수 NNN과 QQQ가 주어진다. NNN은 배열 크기이고 QQQ는 질의 개수이다.
다음 QQQ개 줄에는 질의가 한 줄에 하나씩 주어진다. 각 줄에는 세 정수 aaa, bbb, xxx가 주어진다 (1≤a≤b≤N1 \le a \le b \le N1≤a≤b≤N이고 1≤x≤N1 \le x \le N1≤x≤N). 이는 aaa번 위치부터 bbb번 위치까지 최소값이 xxx라는 뜻이다.
질의는 서로 모순될 수 있다. 조건에 맞는 배열이 없을 수도 있다.
조건에 맞는 배열 개수를 109+710^9+7109+7로 나눈 나머지를 한 줄에 출력한다.
질의가 모순되면 답은 000이다. 값이 같은 질의는 교집합에 모두 들어가야 한다. 작은 값부터 위치를 정하면 각 단계에서 선택지가 서로 겹치지 않는다.