Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma GCC optimzize("Ofast,no-stack-protector")
- #include<bits/stdc++.h>
- #define int long long
- #define quick ios::sync_with_stdio(0);cin.tie(0);
- #define rep(x,a,b) for(int x=a;x<=b;x++)
- #define repd(x,a,b) for(int x=a;x>=b;x--)
- #define lowbit(x) (x&-x)
- #define sz(x) (int)(x.size())
- #define F first
- #define S second
- #define all(x) x.begin(),x.end()
- #define mp make_pair
- #define eb emplace_back
- using namespace std;
- typedef pair<int,int> pii;
- void debug(){
- cout<<"\n";
- }
- template <class T,class ... U >
- void debug(T a, U ... b){
- cout<<a<<" ",debug(b...);
- }
- const int N=1e3+7;
- const int INF=1e18;
- vector<int> v[N];
- int M;
- int qpow(int a,int b){
- int ret=1;
- while(b>0){
- if(b&1) ret=ret*a%M;
- a=a*a%M;
- b>>=1;
- }
- return ret;
- }
- int inv(int x){
- return qpow(x,M-2);
- }
- signed main(){
- quick
- int n;
- cin>>n>>M;
- vector<int> st(n);
- rep(i,0,n-1) cin>>st[i];
- rep(i,0,n-1){
- rep(j,0,n-1){
- int x;
- cin>>x;
- v[j].eb(x);
- }
- }
- rep(i,0,n-1){
- v[i].eb(st[i]);
- }
- rep(i,0,n-1){
- if(!v[i][i]){
- rep(j,i+1,n-1){
- if(v[j][i]){
- swap(v[j],v[i]);
- break;
- }
- }
- }
- rep(j,i+1,n-1){
- int mul=(M-v[j][i]%M*inv(v[i][i])%M)%M;
- rep(x,i,n){
- v[j][x]=(v[j][x]+mul*v[i][x])%M;
- }
- }
- }
- vector<int> ans(n);
- repd(i,n-1,0){
- int s=v[i][n];
- rep(j,i+1,n-1){
- s=s-v[i][j]*ans[j]%M;
- s=(s+M)%M;
- }
- ans[i]=s*inv(v[i][i])%M;
- }
- rep(i,0,n-1){
- cout<<ans[i]<<" \n"[i==n-1];
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement