提交时间:2025-01-03 16:31:45

运行 ID: 35812

#include <bits/stdc++.h> using namespace std; #define int long long int n; const int s=160; int pr[4],pw[4][210]; int fac[210],iv[210]; int g[160][320][320]; int h[160][320][320]; int f[160][320][320]; const int M=1e9+7; inline int qp(int a,int x){ int res=1; while(x){ if(x&1)res=res*a%M; a=a*a%M; x>>=1; } return res; } inline int inv(int x){return qp(x,M-2);} int p[151]; inline void add(int &x,int y){ if((x+=y)>=M)x-=M; } signed main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); // freopen("SS.in","r",stdin); // freopen("SS.out","w",stdout); cin>>n; for(int i=0;i<4;i++){ cin>>pr[i]; pw[i][0]=1; for(int j=1;j<=n;j++) pw[i][j]=pw[i][j-1]*pr[i]%M; } fac[0]=iv[0]=1; for(int i=1;i<=n;i++) fac[i]=fac[i-1]*i%M,iv[i]=inv(fac[i]); g[0][s][s]=1; for(int a=0;a<=n;a++) for(int b=0;a+b<=n;b++) for(int c=0;a+b+c<=n;c++) for(int d=0;a+b+c+d<=n;d++) add(g[a+b+c+d][s+a-b][s+c-d],fac[a+b+c+d]*pw[0][a]%M*pw[1][b]%M*pw[2][c]%M*pw[3][d]%M*iv[a]%M*iv[b]%M*iv[c]%M*iv[d]%M); // cout<<g[a+b+c+d][s+a-b][s+c-d]<<" "<<fac[a+b+c+d]<<" "<<pw[0][a]<<" "<<pw[1][b]<<" "<<pw[2][c]<<" "<<pw[3][d]<<" "<<iv[a]<<" "<<iv[b]<<" "<<iv[c]<<" "<<iv[d]<<endl; // cout<<g[2][0][0]<<endl; int E=1; p[0]=1; for(int i=1;i<=n;i++){ p[i]=1; for(int j=0;j<i;j++) add(p[i],M-p[j]*g[i-j][s][s]%M); add(E,p[i]); } h[0][s][s]=1; for(int i=0;i<=n;i++) for(int x=-i;x<=i;x++) for(int y=abs(x)-i;y<=i-abs(x);y++){ h[i][s+x][s+y]=g[i][s+x][s+y]; for(int j=0;j<i;j++) add(h[i][s+x][s+y],M-h[j][s+x][s+y]*g[i-j][s][s]%M); // cout<<i<<" "<<x<<" "<<y<<" "<<g[i][s+x][s+y]<<" "<<h[i][s+x][s+y]<<endl; } // cout<<endl; f[0][s][s]=1; for(int i=1;i<=n;i++) for(int x=-i;x<=i;x++) for(int y=-i;y<=i;y++) for(int j=0;j<i;j++) { add(f[i][s+x][s+y],(p[j]-f[j][s-x][s-y]+M)*h[i-j][s+x][s+y]%M); // cout<<i<<" "<<j<<" "<<x<<" "<<y<<" "<<(p[j]-f[j][s-x][s-y]+M)<<" "<<h[i-j][s+x][s+y]<<endl; } // for(int i=1;i<=n;i++){ // for(int x=-i;x<=i;x++){ // for(int y=-i;y<=i;y++)cout<<f[i][x+s][y+s]<<" "; // cout<<endl; // } // cout<<endl; // } int E2=0; for(int i=1;i<=n;i++) for(int x=-i;x<=i;x++) for(int y=abs(x)-i;y<=abs(x)+i;y++) if(x!=0||y!=0){ add(E2,f[i][s+x][s+y]); // cout<<i<<" "<<x<<" "<<y<<" "<<f[i][s+x][s+y]<<endl; } // cout<<E2<<endl; E2=(E2*2+E)%M; // cout<<E2<<" "<<E<<endl; cout<<(E2-E*E%M+M)%M<<endl; return 0; } /* */