#include #include #include using namespace std; using namespace atcoder; using ll = long long; const ll MOD = 998244353; ll my_pow(ll x, ll n, ll mod) { ll ret; if (n == 0) { ret = 1; } else if (n % 2 == 1) { ret = (x * my_pow((x * x) % mod, n / 2, mod)) % mod; } else { ret = my_pow((x * x) % mod, n / 2, mod); } return ret; } int main() { ll N, K; cin >> N >> K; vector A(N); for (ll i = 0; i < N; i++) { cin >> A[i]; } // どこで分かれるかを考える vector start_pos(1, 0); ll now = 1; for (ll i = 0; i < N; i++) { now *= A[i]; if (now == 8) { start_pos.push_back(i); now = 1; } else if (abs(now) > 8) { cout << 0 << endl; return 0; } } if (now != 1) { cout << 0 << endl; return 0; } // 最初と最後の要素については候補に含まれない // それ以外だけは自由度がある ll len = start_pos.size(); vector> idxs(len, vector(0)); ll now_id = 0; idxs[0].push_back(0); for (ll i = 0; i < N; i++) { now *= A[i]; if (now == 8) { now_id++; now = 1; } if (now == 1 && now_id != len - 1) { idxs[now_id].push_back(i + 1); } } idxs[len - 1].push_back(N); for (ll i = 0; i < len; i++) { for (ll j = 0; j < idxs[i].size(); j++) { cout << idxs[i][j] << " "; } cout << endl; } vector pows_k(N + 1); for (ll i = 0; i <= N; i++) { pows_k[i] = my_pow(i, K, MOD); } ll ans = 0; vector prod_l(len + 2, 1); vector prod_r(len + 2, 1); for (ll i = 0; i < len; i++) { prod_l[i + 1] = prod_l[i] * (ll)idxs[i].size(); } for (ll i = len - 1; i >= 0; i--) { prod_r[i + 1] = prod_r[i + 2] * (ll)idxs[i].size(); } // 隣接項同士を見て畳み込む for (ll i = 0; i < len - 1; i++) { ll prod_coef = (prod_l[i] * prod_r[i + 3]) % MOD; ll diff_c = idxs[i + 1][0] - idxs[i].back(); ll diff_l = idxs[i].back() - idxs[i][0]; ll diff_r = idxs[i + 1].back() - idxs[i + 1][0]; vector lefts(diff_l + 1, 0); vector rights(diff_r + 1, 0); for (ll x : idxs[i]) { lefts[idxs[i].back() - x]++; } for (ll x : idxs[i + 1]) { rights[x - idxs[i + 1][0]]++; } vector conv = convolution(lefts, rights); for (ll j = 0; j < conv.size(); j++) { ll plus = (prod_coef * conv[j]) % MOD; plus = (plus * pows_k[diff_c + j]) % MOD; ans = (ans + plus) % MOD; } } cout << ans << endl; }