#pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include #include using namespace std; typedef long long ll; ll mod; ll pw(ll a,ll x){ ll ret = 1; while(x){ if(x&1) (ret *= a) %= mod; (a *= a) %= mod; x /= 2; } return ret; } ll inve(ll x){return pw(x,mod - 2);} ll det(vector> a){ int i,j,k,n = a.size(); ll ret = 1; for(i=0;i=mod) (a[i][j]) %= mod; } } for(i=0;i &v,ll N){ //given v[0] = f(z),v[1] = f(z + 1),...v[d - 1] = f(z + d - 1) // output f(N) const int z = 0; //可変 int d = v.size(); vector pref_sum(d + 1),suff_sum(d + 1); //分子 pref_sum[0] = suff_sum[d] = 1; for(int i=1;i<=d;i++) pref_sum[i] = (N + 2*mod - z - i + 1)%mod*pref_sum[i - 1]%mod; for(int i=d - 1;i>=0;i--) suff_sum[i] = (N + 2*mod - z - i)%mod*suff_sum[i + 1]%mod; ll ans = 0; ll s = 1; for(int i=d - 1;i>=0;i--){ ll x = v[i]*fi[i]%mod*fi[d - 1 - i]%mod; if(s>0) (ans += x) %= mod; else (ans += mod - x) %= mod; s *= -1; } return ans; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int t; cin >> t; while(t){ t--; int i,j,n; cin >> n >> mod; vector> a(n),b(n); for(i=0;i> a[i][j]; } if(mod!=2){ cout << 0 << "\n"; }else{ solve(); vector f(n); for(int k=0;k