func_code_string: #include <bits/stdc++.h>   int const MOD = 998244353;   int main() {     std::ios::sync_with_stdio(0);     std::cin.tie(0);     int n, nopt;     std::cin >> n >> nopt;     std::vector<int> h;     h.reserve(n + 1);     h.resize(n);     for (int& hi : h) std::cin >> hi;     h.push_back(h[0]);     std::vector<int> f{1};     f.reserve(n * 2 + 1);     std::vector<int> g;     g.reserve(n * 2 + 1);     for (int i = 0; i < n; ++i) {       if (h[i] == h[i + 1]) {         for (auto& fi : f) fi = int(fi * (int64_t)nopt % MOD);         f.insert(begin(f), 0);         f.push_back(0);       } else {         g.assign(begin(f), end(f));         g.push_back(0);         g.push_back(0);         assert(nopt - 2 >= 0);         std::transform(begin(f), end(f), ++begin(g), ++begin(g),                        [nopt](int fi, int gi) {                          return int((gi + fi * int64_t(nopt - 2)) % MOD);                        });         std::transform(begin(f), end(f), ++ ++begin(g), ++ ++begin(g),                        [](int fi, int gi) {                          return gi + fi >= MOD ? gi + fi - MOD : gi + fi;                        });         std::swap(f, g);       }     }     std::cout << std::accumulate(begin(f) + n + 1, end(f), 0LL) % MOD <<   n ;   }   