$由于太菜只做两题,来抄代码打卡了$>_<
#include<bits/stdc++.h>
#define x first
#define y second
#define int long long
using namespace std;
const int N = 200010, mod = 1e9 + 7;
int fact[N],infact[N];
//快速幂
int qmi(int x,int p)
{
int res=1;
while(p)
{
if(p&1)res=(res*x)%mod;
x=x*x%mod;
p>>=1;
}
return res;
}
void init()
{
fact[0] = infact[0] = 1;
for (int i = 1; i < N; i ++ )
{
fact[i] = fact[i - 1] * i % mod;
infact[i] =infact[i - 1] * qmi(i, mod - 2) % mod;
}
}
int mem[N][2],vis[N][2],test_id;
int cnteven,n,k,pows;
int dp(int i,bool equal)
{
if(i<0)return 1;
int &rt=mem[i][equal];
if(vis[i][equal]==test_id)return rt;
vis[i][equal]=test_id;
//i位为0的情况 等于i-1位为0乘以pow数
if(equal == false)
return rt=(pows*dp(i-1,0))%mod;
//n为奇数/偶数
if(n&1)
return rt=(dp(i-1,1)*(cnteven+1))%mod;
return rt=(dp(i-1,1)*cnteven)%mod+dp(i-1,0)%mod;
/*
奇数 选偶数个1 + 全选1 乘以上一层为1
偶数 选偶数个1 乘以 上一层为1 +上一层为0
*/
}
void solve()
{
test_id++;
cin>>n>>k;
//“1”的个一定数为偶数个
cnteven=0;
for(int i=0;i<n;i+=2)
cnteven=(cnteven+infact[n-i]*infact[i]%mod*fact[n])%mod;
pows=qmi(2,n);
cout<<(dp(k-1,1)+mod)%mod<<endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
init();
int T;
cin>>T;
while(T--)
solve();
return 0;
}