func_code_string: #include <bits/stdc++.h>   using ul = std::uint32_t;   using li = std::int32_t;   using ull = std::uint64_t;   using ll = std::int64_t;   using llf = long double;   ul n, m, k;   const ul maxn = 2e5;   const ul base = 998244353;   ul plus(ul a, ul b) { return a + b < base ? a + b : a + b - base; }   ul plus(ul a, ul b, ul c) { return plus(plus(a, b), c); }   ul minus(ul a, ul b) { return a < b ? a + base - b : a - b; }   ul mul(ul a, ul b) { return ull(a) * ull(b) % base; }   ul mul(ul a, ul b, ul c) { return mul(mul(a, b), c); }   ul mul(ul a, ul b, ul c, ul d) { return mul(mul(a, b, c), d); }   void exgcd(li a, li b, li& x, li& y) {     if (b) {       exgcd(b, a % b, y, x);       y -= a / b * x;     } else {       x = 1;       y = 0;     }   }   ul inverse(ul a) {     li x, y;     exgcd(a, base, x, y);     return x < 0 ? x + li(base) : x;   }   ul pow(ul a, ul b) {     ul ret = 1;     while (b) {       if (b & 1) {         ret = mul(a, ret);       }       b >>= 1;       a = mul(a, a);     }     return ret;   }   ul h[maxn + 1];   ul fac[maxn + 1];   ul fiv[maxn + 1];   ul twopow[maxn + 1];   ul bi(ul a, ul b) { return mul(fac[a], fiv[b], fiv[a - b]); }   ul g(ul a) {     ul ret = mul(base + 1 >> 1, twopow[a]);     if (~a & 1) {       ret = minus(ret, mul(base + 1 >> 1, bi(a, a >> 1)));     }     return ret;   }   int main() {     fac[0] = 1;     twopow[0] = 1;     for (ul i = 1; i <= maxn; ++i) {       fac[i] = mul(fac[i - 1], i);       twopow[i] = plus(twopow[i - 1], twopow[i - 1]);     }     fiv[maxn] = inverse(fac[maxn]);     for (ul i = maxn; i; --i) {       fiv[i - 1] = mul(fiv[i], i);     }     std::scanf( %u%u , &n, &k);     k %= base;     for (ul i = 1; i <= n; ++i) {       std::scanf( %u , &h[i]);     }     for (ul i = 1; i <= n; ++i) {       m += h[i] != h[i % n + 1];     }     ul ans = 0;     for (ul a = 0; a <= m; ++a) {       ans = plus(ans, mul(bi(m, a), pow(minus(k, 2), m - a), g(a)));     }     ans = mul(ans, pow(k, n - m));     std::printf( %u n , ans);     return 0;   }   