func_code_string: #include <bits/stdc++.h>   using namespace std;   long long fact[200005];   long long extgcd(long long a, long long b, long long& x, long long& y) {     long long d = a;     if (b != 0LL) {       d = extgcd(b, a % b, y, x);       y -= (a / b) * x;     } else {       x = 1;       y = 0;     }     return d;   }   long long mod_inverse(long long a, long long m) {     long long x, y;     extgcd(a, m, x, y);     return (m + x % m) % m;   }   long long mod_fact(long long n, long long p, long long& e) {     e = 0;     if (n == 0) return 1;     long long res = mod_fact(n / p, p, e);     e += n / p;     if (n / p % 2 != 0) {       return res * (p - fact[n % p]) % p;     }     return res * fact[n % p] % p;   }   long long mod_comb(long long n, long long k, long long p) {     if (n < 0 || k < 0 || n < k) return 0;     long long e1, e2, e3;     long long a1 = mod_fact(n, p, e1), a2 = mod_fact(k, p, e2),               a3 = mod_fact(n - k, p, e3);     if (e1 > e2 + e3) return 0;     return a1 * mod_inverse(a2 * a3 % p, p) % p;   }   long long mod_pow(long long x, long long n) {     long long ans = 1;     while (n > 0) {       if (n & 1) {         ans = ans * x % 998244353LL;       }       x = x * x % 998244353LL;       n >>= 1;     }     return ans;   }   int n;   long long k;   int h[200005];   int main(void) {     fact[0] = 1;     for (long long i = 1; i <= 200000; i++) {       fact[i] = fact[i - 1] * i % 998244353LL;     }     scanf( %d%lld , &n, &k);     for (int i = 0; i < n; i++) {       scanf( %d , &h[i]);     }     int cur = 0, nxt = 1;     long long po = 1;     int cnt = 0;     for (int i = 0; i < n; i++) {       int ans = h[i];       int cans = h[(i + 1) % n];       if (ans == cans) {         po = po * k % 998244353LL;       } else {         cnt++;       }     }     long long ans = 0;     long long v1 = 1;     for (int i = 0; i < cnt; i++) {       int rest = cnt - i;       long long v4 = mod_comb(cnt, i, 998244353LL);       long long sum = 0;       if (rest % 2 == 1) {         if (i == cnt) {           sum += v1 * mod_pow(2, rest - 1) % 998244353LL;           sum %= 998244353LL;         } else {           sum += v1 * mod_pow(2, rest - 1) % 998244353LL;           sum %= 998244353LL;         }       } else if (rest > 0) {         long long v3 = mod_pow(2, rest - 1);         long long v5 = mod_comb(rest - 1, rest / 2, 998244353LL);         v3 = (v3 - v5 + 998244353LL) % 998244353LL;         sum += v1 * v3 % 998244353LL;         sum %= 998244353LL;       }       sum = sum * v4 % 998244353LL;       ans += sum;       ans %= 998244353LL;       v1 = v1 * (k - 2LL) % 998244353LL;     }     ans = ans * po % 998244353LL;     printf( %lld n , ans);     return 0;   }   