#include #include #include using namespace atcoder; using mint = modint998244353; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000001 struct combi{ deque kaijou; deque kaijou_; combi(int n){ kaijou.push_back(1); for(int i=1;i<=n;i++){ kaijou.push_back(kaijou[i-1]*i); } mint b=kaijou[n].inv(); kaijou_.push_front(b); for(int i=1;i<=n;i++){ int k=n+1-i; kaijou_.push_front(kaijou_[0]*k); } } mint combination(int n,int r){ if(r>n)return 0; mint a = kaijou[n]*kaijou_[r]; a *= kaijou_[n-r]; return a; } mint junretsu(int a,int b){ mint x = kaijou_[a]*kaijou_[b]; x *= kaijou[a+b]; return x; } mint catalan(int n){ return combination(2*n,n)/(n+1); } }; void dfs(int l,int r,vector &dp,vector &c){ if(r-l<=1)return; int m = (l+r)/2; dfs(l,m,dp,c); vector x; for(int i=l;i y; rep(i,r-l+2){ y.push_back(c[i]); } x = convolution(x,y); for(int i=m;i>n; int x0,y0,x1,y1; int dx,dy; cin>>x0>>y0>>x1>>y1; dx = abs(x0-x1); dy = abs(y0-y1); mint A,B; { int a,b; cin>>a>>b; int t = a+b; t *= 2; A = a; B = b; A /= t; B /= t; } vector a(n); rep(i,n)cin>>a[i]; if(dx+dy>n*2){ cout<<0< tc; { vector ta(n*2+1),tb(n*2+1); for(int i=dx;i dp(n+1,0); rep(i,n+1){ dp[i] = tc[i*2]; } tc.resize(0); { vector ta(n+1),tb(n+1); rep(i,n+1){ ta[i] = A.pow(i*2); ta[i] *= C.combination(i*2,i); ta[i] *= C.kaijou_[i*2]; } rep(i,n+1){ tb[i] = B.pow(i*2); tb[i] *= C.combination(i*2,i); tb[i] *= C.kaijou_[i*2]; } tc = convolution(ta,tb); rep(i,tc.size()){ tc[i] *= C.kaijou[i*2]; } } dfs(0,dp.size(),dp,tc); mint ans = 0; rep(i,n){ ans += dp[i+1] * a[i]; } cout<