순열

아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

집합 M={1,2,3,,m}M = \{1, 2, 3, \dots, m\} 위의 순열 pp란 일대일 대응 p:MMp : M \to M을 뜻한다. 순열 pp가 모든 iMi \in M에 대해 p(p(i))=ip(p(i)) = i를 만족하면 pp를 대합(involution)이라고 부른다.

길이가 2n2n인 괄호 표현식이란 문자 ()만으로 이루어진 길이 2n2n짜리 문자열이다. 괄호 표현식이 올바르다(correct)는 것은, 여는 괄호 (의 개수와 닫는 괄호 )의 개수가 같고, 문자열의 모든 접두사에서 (의 개수가 )의 개수보다 작지 않다는 뜻이다.

순열 pp가 길이 2n2n인 괄호 표현식을 부호화한다(encode)는 것은 다음을 뜻한다. 여는 괄호들은 왼쪽에서 오른쪽 순서로 위치 p(1),p(2),,p(n)p(1), p(2), \dots, p(n)에 있고, 닫는 괄호들도 왼쪽에서 오른쪽 순서로 위치 p(n+1),p(n+2),,p(2n)p(n+1), p(n+2), \dots, p(2n)에 있다. 특히 이 경우 p(1)<p(2)<<p(n)p(1) < p(2) < \dots < p(n)p(n+1)<p(n+2)<<p(2n)p(n+1) < p(n+2) < \dots < p(2n)이 모두 성립한다.

pp의 값 중 일부가 이미 주어져 있다. 남은 값들을 채워서 pp가 대합이면서 어떤 올바른 괄호 표현식을 부호화하도록 만드는 방법의 수를 구하여라.

입력

표준 입력의 첫 줄에는 공백으로 구분된 두 정수 nnkk가 주어진다 (1n1061 \le n \le 10^6, 1k2n1 \le k \le 2n). 이어지는 kk개의 줄에는 각각 공백으로 구분된 정수 쌍이 주어진다. 그중 ii번째 줄에는 p(ai)=bip(a_i) = b_i임을 뜻하는 두 정수 aia_ibib_i가 있다 (1ai,bi2n1 \le a_i, b_i \le 2n). 모든 aia_i는 서로 다르고, 모든 bib_i도 서로 다르다.

출력

집합 {1,2,3,,2n}\{1, 2, 3, \dots, 2n\}의 순열 중에서 대합이고, 어떤 올바른 괄호 표현식을 부호화하며, 모든 1ik1 \le i \le k에 대해 p(ai)=bip(a_i) = b_i를 만족하는 순열의 개수를 한 줄에 정수 하나로 출력한다.

힌트

첫 번째 예제에서 모든 조건을 만족하는 순열은 p=1,2,4,3,5,6p = \langle 1, 2, 4, 3, 5, 6 \rangle 하나뿐이며, 이 순열은 괄호 표현식 (()())를 부호화한다.