#include #include #include #include #include using namespace std; using i32 = int; using u32 = unsigned int; using i64 = long long; using u64 = unsigned long long; #define rep(i,n) for(int i=0; i<(int)(n); i++) const i64 INF = 1001001001001001001; using Modint = atcoder::static_modint<998244353>; int main(){ int N; cin >> N; vector P(N); rep(i,N){ int a; cin >> a; P[i] = a; } vector> inv(N+1); inv[0].resize(N+1); inv[0][0] = 1; rep(i,N){ auto x = - P[i]; inv[i+1] = inv[i]; rep(j,N) inv[i+1][j+1] += inv[i+1][j] * x; } vector> prod(N+1); prod[0].resize(N+1); prod[0][0] = 1; rep(i,N){ auto x = P[i]; prod[i+1] = prod[i]; for(int j=N-1; j>=0; j--) prod[i+1][j+1] += prod[i+1][j] * x; } int Q; cin >> Q; rep(q,Q){ int l,r,k; cin >> l >> r >> k; l--; Modint ans = 0; for(int j=0; j<=k; j++) ans += prod[r][j] * inv[l][k-j]; cout << ans.val() << '\n'; } return 0; }