XOR 수열
시간 제한2초메모리 제한512 MB
2^m개의 질의 값 각각에 대해 XOR이 최대가 되는 번호를 정한 배열이 주어질 때, 이를 만들어 내는 서로 다른 m비트 정수 n개의 순서 있는 배열의 개수를 10^9+7로 나눈 나머지로 센다.
문제
두 정수 과 이 주어진다. 또한 개의 서로 다른 정수 이 주어지며, 이다. 각 ()에 대해, 가 와 비트별 XOR을 했을 때 최댓값을 갖도록 하는 를 찾았다. 즉, 모든 ()에 대해 이다 (는 비트별 XOR을 나타낸다).
이제 반대 문제를 생각하자. , , 그리고 수열 이 주어졌을 때, 위 알고리즘으로 이 수열을 만들어낼 수 있는 서로 다른 정수 수열 의 개수를 세라. 두 수열이 다르다는 것은, 어떤 에 대해 한 수열의 가 다른 수열의 와 다른 경우를 말한다. 이 개수를 로 나눈 나머지를 출력하라.
입력
각 테스트 케이스의 첫 줄에는 두 정수 ()과 ()이 공백으로 구분되어 주어진다. 은 수열의 길이이고, 은 수열의 길이이다. 다음 개의 줄에는 각각 하나의 정수 ()가 주어진다. 이는 수열 의 값들이다. 부터 까지의 모든 값이 적어도 한 번씩 나타난다.
출력
위 알고리즘으로 수열 을 만들어낼 수 있는 수열 의 개수를 로 나눈 나머지를 한 줄에 출력한다.