提交时间:2025-06-22 18:49:41
运行 ID: 38119
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back using namespace std; typedef long long ll; const int maxn=4e5+10,mod=998244353; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,a[15][15]; int f[1<<15][15],g[1<<15][15]; int h[1<<15][15][15]; inline int add(int a,int b){if((a+=b)>=mod)a-=mod;return a;} void slv(){ n=read(); up(i,0,n-1)up(j,0,n-1)a[i][j]=read(); up(i,0,n-1)f[1<<i][i]=1; up(i,0,(1<<n)-1)up(j,0,n-1)if((i>>j)&1){ int U=i^(1<<j); for(int S=(U-1)&U;S;S=(S-1)&U){ up(p,0,n-1)if((S>>p)&1)if(a[j][p]){ up(q,0,n-1)if(((U^S)>>q)&1)if(a[j][q]){ h[i][j][p]=add(h[i][j][p],f[S][p]*2ll*f[U^S][q]%mod); f[i][j]=add(f[i][j],f[S][p]*1ll*f[U^S][q]%mod); } } } up(p,0,n-1)if((U>>p)&1)if(a[j][p]){ f[i][j]=add(f[i][j],f[U][p]*2ll%mod); h[i][j][p]=add(h[i][j][p],f[U][p]*2ll%mod); } } g[(1<<n)-1][0]=1; down(i,(1<<n)-1,1)up(j,0,n-1)if((i>>j)&1){ int U=i^(1<<j); for(int S=(U-1)&U;S;S=(S-1)&U){ up(p,0,n-1)if((S>>p)&1)if(a[j][p]){ up(q,0,n-1)if(((U^S)>>q)&1)if(a[j][q]){ g[S][p]=add(g[S][p],g[i][j]*1ll*f[U^S][q]%mod); g[U^S][q]=add(g[U^S][q],g[i][j]*1ll*f[S][p]%mod); } } } up(p,0,n-1)if((U>>p)&1)if(a[j][p])g[U][p]=add(g[U][p],g[i][j]*2ll%mod); } printf("%d\n",f[(1<<n)-1][0]); up(i,0,n-1){ up(j,0,n-1){ if(!a[i][j])printf("0 "); else { int ans=0; up(k,0,(1<<n)-1)if(((k>>i)&1)&&((k>>j)&1)){ ans=add(ans,f[k][i]*1ll*g[k][i]%mod); ans=add(ans,mod-h[k][i][j]*1ll*g[k][i]%mod); } printf("%d ",ans); } }printf("\n"); } } int main(){ //freopen("1.in","r",stdin),freopen("1.out","w",stdout); slv(); return 0; }