내 맘대로 정렬

시간 제한1초메모리 제한1024 MB

요약
1..N의 순열 중 인접 요소 교환을 한 번 수행했을 때 주어진 각 p의 값이 q로 이동하는 순열의 개수를 센다.
난이도

어려움10점 중 9점

유형
조합론, 수학, 동적 계획법
정답자
아직 제출이 없습니다

문제

평소에 다른 사람이 만든 정렬 문제만 풀던 피돌이는 이제 문제 풀이에 질렸다! 그래서 피돌이는 버블 정렬의 과정에서 아이디어를 얻어온 인접 요소 교환을 통해 자신이 정한 QQ개의 소원을 만족하는 길이가 NN인 순열 A=\[a_1,a_2,⋯ ,a_N]A=\[a\_1, a\_2, \cdots, a\_N]를 찾는 문제를 만들기로 했다. 길이가 NN인 순열이란 11부터 NN까지의 정수가 한 번씩 등장하는 수열을 말한다.

인접 요소 교환이란, 다음 행동을 순차적으로 한 번 수행하는 것을 말한다.

  • a_1a\_1과 a_2a\_2를 비교하여 a_2a\_2가 더 크면 그대로 두고 더 작으면 둘의 위치를 바꾼다.
  • a_2a\_2와 a_3a\_3을 비교하여 a_3a\_3이 더 크면 그대로 두고 더 작으면 둘의 위치를 바꾼다.
  • ⋯\cdots
  • a_N−1a\_{N-1}과 a_Na\_N을 비교하여 a_Na\_N이 더 크면 그대로 두고 더 작으면 둘의 위치를 바꾼다.

즉, 한 번의 인접 요소 교환에서 N−1N-1번의 비교와 위치 교환 시도가 일어난다. 예를 들어, \[2,3,1]\[2, 3, 1]에 인접 요소 교환을 한 번 한 경우, \[2,1,3]\[2, 1, 3]이 된다.

피돌이가 만든 문제의 순열 AA는 QQ개의 소원을 모두 만족해야 한다. ii번째 소원은 두 정수 p_ip\_i와 q_iq\_i로 나타내며, 이는 AA에 인접 요소 교환을 한 번 한 후의 a_q_ia\_{q\_i}값이 인접 요소 교환 전의 a_p_ia\_{p\_i} 값과 같아야 한다는 뜻이다.

피돌이는 AA로 가능한 순열을 모두 구해보고 싶었지만 너무 많다 생각하여 개수만 구하기로 하였다. 단, 개수가 너무 커질 수 있으므로 개수를 1,000,000,0071\\,000\\,000\\,007로 나눈 나머지를 구해보자.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다.  (1≤T≤200 000)\ (1\le T\le 200\ 000)

각 테스트 케이스의 첫째 줄에 순열의 길이 NN이 주어진다.  (2≤N≤500 000)\ (2\le N\le 500\ 000)

각 테스트 케이스의 둘째 줄에 소원의 개수 QQ가 주어진다.  (1≤Q≤200 000)\ (1\le Q\le 200\ 000)

각 테스트 케이스의 다음 QQ줄에 정수 p_i,q_ip\_i, q\_i가 공백을 두고 주어진다. (1≤p_i≤q_i≤N)(1\le p\_i\le q\_i\le N)

주어지는 모든 소원은 다름이 보장된다. 즉 i≠ji\ne j이면 (p_i, q_i)≠(p_j, q_j)(p\_i,\ q\_i)\ne (p\_j,\ q\_j)이다.

모든 테스트 케이스에서 QQ의 합은 200 000200\ 000을 넘지 않는다.

출력

각 테스트 케이스의 첫째 줄에 가능한 순열 AA의 개수를 1 000 000 0071\ 000\ 000\ 007로 나눈 나머지를 출력한다.

힌트

모든 테스트 케이스의 NN의 합에는 제한이 없음에 유의해라.

예제1

  1. 예제 1

    입력
    2
    5
    2
    1 2
    3 4
    7777
    1
    1 7777
    
    예상 출력
    3
    526835148