数组元素要小于等于2^{k}-1,大于等于0。数组内的每个元素都可以由长度为k的二进制数表示,数组元素总和要最大,那么每一列需要且仅需要一个0。

#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
const int b= 1e9+7;
int main()
{
    long long n,t,k;
    cin>>t;
    while(t--){
        cin>>n>>k;
        long long a=1;
        while(k){
            if(k&1){
                a=(a*n)%(b);
            }
            n=(n*n)%(b);
            k>>=1;
        }
        cout<<a<<endl;
    }
    return 0;
}