아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

교차는 허용되지 않아!

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

요약
N×N 판에서 위쪽 칸 K개에 놓인 말을 아래쪽 지정 칸 K개로 겹치지 않는 단조 경로로 옮기는 경우의 수를 1e9+7로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

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

문제

N×NN \times N개의 칸으로 이루어진 판을 생각하자. 판 위에는 K≤NK \le N개의 말이 있다. 말들은 처음에 판의 맨 위쪽 칸들 중 일부에 놓여 있다.

(r,c)(r, c)에 있는 말은 오른쪽으로 한 칸 이동해 (r,c+1)(r, c + 1)로 가거나, 아래로 한 칸 이동해 (r+1,c)(r + 1, c)로 갈 수 있다.

모든 말을 판의 맨 아래쪽에 주어진 위치로 옮기되, 서로 다른 두 말의 경로가 공통된 칸을 지나지 않도록 하는 방법의 수를 구하자. 두 방법은 어떤 말의 경로가 서로 다르면 다른 방법으로 센다. 방법의 수가 클 수 있으므로 109+710^{9} + 7로 나눈 나머지를 구한다.

입력

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

각 테스트 케이스의 첫째 줄에는 판의 크기와 말의 수를 나타내는 두 정수 NN과 KK가 주어진다 (1≤N≤1051 \le N \le 10^5, 1≤K≤1001 \le K \le 100).

둘째 줄에는 말의 처음 위치를 나타내는 KK개의 정수 a1a_1, a2a_2, …\ldots, aKa_K가 주어진다 (1≤a1<a2<…<aK≤N1 \le a_1 < a_2 < \ldots < a_K \le N). 구체적으로, 말들은 처음에 (1,a1)(1, a_1), (1,a2)(1, a_2), …\ldots, (1,aK)(1, a_K)에 있다.

셋째 줄에는 말의 최종 위치를 나타내는 KK개의 정수 b1b_1, b2b_2, …\ldots, bKb_K가 주어진다 (1≤b1<b2<…<bK≤N1 \le b_1 < b_2 < \ldots < b_K \le N). 구체적으로, 말들은 (N,b1)(N, b_1), (N,b2)(N, b_2), …\ldots, (N,bK)(N, b_K)로 옮겨져야 한다.

입력에 주어지는 모든 NN의 합은 2⋅1072 \cdot 10^7을 넘지 않는다.

입력에 주어지는 모든 KK의 합은 2⋅1042 \cdot 10^4을 넘지 않는다.

출력

각 테스트 케이스마다 한 줄에 답을 출력한다. 각 줄에는 말을 옮기는 서로 다른 방법의 수를 109+710^{9} + 7로 나눈 나머지를 출력한다.

예제1

  1. 예제 1

    입력
    1
    5 2
    1 2
    3 4
    
    예상 출력
    50