Question and Answer from L4-M3
import sys
import math
MOD = 10**9 + 7
# Precompute factorials up to 5 * 10^5 (since sum of N across tests ≤ 5e5)
MAX = 5 * 10**5 + 5
fact = [1] * (MAX)
for i in range(1, MAX):
fact[i] = (fact[i-1] * i) % MOD
def solve():
input_data = sys.stdin.read().strip().split()
t = int(input_data[0])
idx = 1
results = []
for _ in range(t):
N, K = int(input_data[idx]), int(input_data[idx+1])
idx += 2
A = list(map(int, input_data[idx:idx+N]))
idx += N
cnt_even = sum(1 for x in A if x % 2 == 0)
cnt_odd = N - cnt_even
odd_pos = (N + 1) // 2
even_pos = N // 2
ans = 0
if K == 0:
# All must be same parity
if cnt_even == N or cnt_odd == N:
ans = fact[N]
else:
ans = 0
else: # K == 1
# Case 1: odd positions = odd numbers, even positions = even numbers
if cnt_odd >= odd_pos and cnt_even >= even_pos:
ans = (ans + fact[odd_pos] * fact[even_pos]) % MOD
# Case 2: odd positions = even numbers, even positions = odd numbers
if cnt_even >= odd_pos and cnt_odd >= even_pos:
ans = (ans + fact[odd_pos] * fact[even_pos]) % MOD
results.append(str(ans % MOD))
print("\n".join(results))
if __name__ == "__main__":
solve()