func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long mod = 998244353;   long long a_na_b_mod_c(long long a, long long b, long long c) {     if (b == 0) return 1;     long long t = a_na_b_mod_c(a, (b / 2), c) % c;     if (b % 2 == 0)       return (t * t) % c;     else       return (((t * t) % c) * (a % c)) % c;   }   long long ip(long long a) { return a_na_b_mod_c(a, mod - 2, mod); }   vector<long long> f(1, 1), fi;   long long nCk(long long n, long long k) {     return (((f[n] * fi[k]) % mod) * fi[n - k]) % mod;   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     int n;     long long k;     cin >> n >> k;     if (!k) {       cout <<  0 n ;       return 0;     }     for (int i = 1; i < n + 79; i++) f.push_back((f.back() * i) % mod);     fi.resize(n + 79);     for (int i = 0; i < n + 79; i++) fi[i] = ip(f[i]);     vector<int> h(n);     for (int i = 0; i < n; i++) {       cin >> h[i];     }     h.push_back(h[0]);     long long eq = 0;     for (int i = 1; i <= n; i++) {       if (h[i] == h[i - 1]) eq++;     }     long long dif = n - eq;     if (!dif) {       cout <<  0 n ;       return 0;     }     long long all = 0;     long long i2 = ip(2);     long long p2 = a_na_b_mod_c(2, dif, mod);     long long kp2 = 1;     for (long long z = 0; z < dif; z++) {       long long non_zero = dif - z;       long long good = p2;       long long zero = non_zero % 2 == 1 ? 0 : nCk(non_zero, non_zero >> 1);       good = ((good - zero + mod) * i2) % mod;       all += (((good * nCk(dif, z)) % mod) * kp2) % mod;       all %= mod;       p2 = (p2 * i2) % mod;       kp2 = (kp2 * (k - 2)) % mod;     }     cout << (all * a_na_b_mod_c(k, eq, mod)) % mod <<   n ;     return 0;   }   