토론 클럽 2
시간 제한20초메모리 제한1024 MB
원형으로 앉은 m명을 두 개의 연속된 구간으로 나눌 때, 모든 견해가 두 팀에 모두 나타나는 방법의 수를 구합니다.
문제
다시 바이토키 토론 클럽을 방문한다. 이 클럽에는 명의 회원이 있으며, 각 회원은 개의 기본 질문에 대한 자신의 의견을 밝혔다. 질문의 구체적인 문구는 중요하지 않다. 각 질문에는 두 가지 답 중 하나가 가능하다(예: 커피인가 차인가). 한 사람의 의견은 비트열로 나타낼 수 있으며, 이 비트열을 이진수로 읽으면 0부터 까지의 정수가 된다. 클럽에 같은 의견을 가진 회원은 두 명이 없다.
오늘 클럽 모임에 명의 회원이 참석했다. 각자 이미 둥근 테이블의 자리에 앉아 있다. 회원들은 주요 주제를 미리 준비하려고 두 팀으로 나뉘어 논의하려 한다. 혼란을 줄이기 위해 각 팀은 테이블에서 연속으로 앉은 회원들로 구성되어야 한다. 토론의 내실을 위해 각 팀에는 모든 의견이 빠짐없이 있어야 한다. 즉, 각 기본 질문과 가능한 각 답에 대해, 첫 번째 팀에 그 의견을 가진 회원이 있으면 두 번째 팀에도 반드시 그 의견을 가진 회원이 있어야 한다.
회원들을 두 팀으로 나누는 방법의 수를 구하는 프로그램을 작성하라.
입력
첫 번째 줄에 두 정수 과 이 주어진다(, ). 각각 기본 질문의 수와 모임에 참석한 회원의 수이다. 두 번째 줄에는 테이블을 둘러싼 순서대로 0부터 사이의 서로 다른 정수 개가 주어지며, 각 정수는 한 회원의 의견을 나타낸다.
출력
조건을 만족하는, 회원을 두 팀으로 나누는 방법의 수를 정수 하나로 출력한다.
제한