믈루란 저장
시간 제한2초메모리 제한256 MB
질량의 합이 주어진 2의 거듭제곱 임계값이 되는 두 동위원소가 서로 다른 창고에 가도록 1부터 n까지를 두 창고에 나누는 경우의 수를 10^9+7로 나눈 나머지를 구한다.
문제
2345년에 발견된 화학 원소 믈루란은 방사능이 매우 강하다. 믈루란을 잘못 다루면 예측할 수 없는 결과가 생길 수 있으므로 사용, 보관, 운송할 때 각별히 주의해야 한다.
믈루란에는 여러 동위 원소가 있고, 각 동위 원소는 자연수인 원자 질량으로 구분된다. 질량의 합이 개의 "임계수" 중 하나와 같은 두 동위 원소를 오래 함께 보관하면 두 동위 원소가 반응해 폭발한다. 모든 임계수는 2의 음이 아닌 거듭제곱이다.
플랫랜드의 핵 연구소에서는 믈루란 시료를 두 특수 창고에 보관한다. 과학자들은 질량이 1부터 까지인 개의 서로 다른 믈루란 동위 원소를 얻었다. 이제 이 동위 원소를 창고에 나누어 보관해야 한다. 각 동위 원소가 정확히 한 창고에 보관되고, 질량의 합이 "임계수" 중 하나인 서로 다른 두 동위 원소가 서로 다른 창고에 보관되는 방식을 안전한 보관 방식이라고 한다.
과학자들을 위해 믈루란을 안전하게 보관하는 서로 다른 방식의 수를 구하자.
입력
입력은 여러 테스트 세트로 이루어진다. 각 세트는 두 줄로 설명된다.
설명의 첫째 줄에는 두 정수 과 (, )가 주어진다. 이는 보관해야 하는 동위 원소의 수와 "임계수"의 수이다. 다음 줄에는 개의 서로 다른 자연수가 주어지며, 각 수는 2의 거듭제곱이고 을 넘지 않는다. 이 수들이 임계수이다. 임계수는 서로 공백으로 구분된다.
각 테스트에서 데이터 세트의 수는 10000을 넘지 않는다. 테스트의 마지막 줄에는 두 개의 0이 주어진다.
출력
각 테스트 세트마다 모든 동위 원소를 두 창고에 보관하는 안전한 방식의 수를 로 나눈 나머지를 한 줄에 출력한다.