순열
시간 제한2초메모리 제한512 MB
2n개 점 위의 부분 순열을 대합이면서 올바른 괄호열을 부호화하도록 채우는 경우의 수를 센다.
문제
집합 위의 순열 란 일대일 대응 을 뜻한다. 순열 가 모든 에 대해 를 만족하면 를 대합(involution)이라고 부른다.
길이가 인 괄호 표현식이란 문자 (와 )만으로 이루어진 길이 짜리 문자열이다. 괄호 표현식이 올바르다(correct)는 것은, 여는 괄호 (의 개수와 닫는 괄호 )의 개수가 같고, 문자열의 모든 접두사에서 (의 개수가 )의 개수보다 작지 않다는 뜻이다.
순열 가 길이 인 괄호 표현식을 부호화한다(encode)는 것은 다음을 뜻한다. 여는 괄호들은 왼쪽에서 오른쪽 순서로 위치 에 있고, 닫는 괄호들도 왼쪽에서 오른쪽 순서로 위치 에 있다. 특히 이 경우 과 이 모두 성립한다.
의 값 중 일부가 이미 주어져 있다. 남은 값들을 채워서 가 대합이면서 어떤 올바른 괄호 표현식을 부호화하도록 만드는 방법의 수를 구하여라.
입력
표준 입력의 첫 줄에는 공백으로 구분된 두 정수 과 가 주어진다 (, ). 이어지는 개의 줄에는 각각 공백으로 구분된 정수 쌍이 주어진다. 그중 번째 줄에는 임을 뜻하는 두 정수 와 가 있다 (). 모든 는 서로 다르고, 모든 도 서로 다르다.
출력
집합 의 순열 중에서 대합이고, 어떤 올바른 괄호 표현식을 부호화하며, 모든 에 대해 를 만족하는 순열의 개수를 한 줄에 정수 하나로 출력한다.
힌트
첫 번째 예제에서 모든 조건을 만족하는 순열은 하나뿐이며, 이 순열은 괄호 표현식 (()())를 부호화한다.