#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MOD = 1000000007;
#define sz(x) (ll)(x).size()
#define rd ({ll x; cin >> x; x; })
#define dbg(x) cerr << "[" #x "] " << (x) << "\n\n"
// #define errv(x) {cerr << "["#x"] ["; for (const auto& ___ : (x)) cerr << ___ << ", "; cerr << "]\n";}
// #define errvn(x, n) {cerr << "["#x"] ["; for (auto ___ = 0; ___ < (n); ++___) cerr << (x)[___] << ", "; cerr << "]\n";}
// #define cerr if(0)cerr
#define xx first
#define yy second
mt19937 rnd(std::chrono::high_resolution_clock::now().time_since_epoch().count());
/*_________________________________________________________________________________________________________________________*/
#define int long long
ll modpow(ll a, ll b)
{
ll res = 1;
while (b > 0) {
if (b & 1)
res = (res * a) % MOD;
a = (a * a) % MOD;
b >>= 1;
}
return res;
}
vector<ll> fact(200005, 1);
void factoMod()
{
for (int i = 1; i < 200005; i++)
fact[i] = (fact[i - 1] * i) % MOD;
}
ll ncrMod(ll n, ll r)
{
if (r > n)
return 0;
return (((((fact[n] * modpow(r, MOD - 2)) % MOD) * modpow(n - r, MOD - 2)) % MOD) + MOD) % MOD;
}
void Solve()
{
ll n, k;
cin >> n >> k;
vector<ll> count(2, 0);
for (int i = 0; i < n; i++)
count[rd]++;
ll zer = modpow(2, count[0]);
ll ans = 0;
for (int i = 1; i <= count[1]; i++) {
if (count[1] - i < k)
break;
ans += (ncrMod(count[1], i) * zer) % MOD;
ans %= MOD;
}
cout << (ans + zer - 1 + 2 * MOD) % MOD << '\n';
}
int32_t main()
{
factoMod();
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
for (int i = 1; i <= t; i++) {
// cout << "Case #" << i << ": "; // cout << "Case " << i << ": ";
Solve();
}
return 0;
}
// Coded by Tahsin Arafat (@TahsinArafat)