func_code_string: #include <bits/stdc++.h>   using namespace std;   long long n, k;   int a[200007];   long long fac[200007];   long long inv[200007];   long long pw2[200007];   long long free_pw[200007];   long long fastpow(long long x, long long st) {     long long ret = 1;     while (st > 0) {       if ((st & 1) != 0) {         ret = (ret * x) % 998244353;         --st;       } else {         x = (x * x) % 998244353;         st >>= 1;       }     }     return ret;   }   long long get_comb(long long x, long long y) {     if (x < y) {       return 0;     }     long long ret = fac[x];     ret = (ret * inv[y]) % 998244353;     ret = (ret * inv[x - y]) % 998244353;     return ret;   }   void input() {     scanf( %I64d%I64d , &n, &k);     for (int i = 1; i <= n; ++i) {       scanf( %d , &a[i]);     }     a[n + 1] = a[1];     fac[0] = pw2[0] = free_pw[0] = 1;     for (int i = 1; i <= n; ++i) {       fac[i] = (fac[i - 1] * i) % 998244353;       pw2[i] = (pw2[i - 1] * 2) % 998244353;       free_pw[i] = (free_pw[i - 1] * (k - 2)) % 998244353;     }     inv[n] = fastpow(fac[n], 998244353 - 2);     for (int i = n - 1; i >= 0; --i) {       inv[i] = (inv[i + 1] * (i + 1)) % 998244353;     }   }   void solve() {     int free = 0;     long long aux = 1;     for (int i = 1; i <= n; ++i) {       if (a[i] == a[i + 1]) {         ++free, aux = (aux * k) % 998244353;       }     }     long long ans = 0;     for (int i = 0; i < n - free; ++i) {       long long w = (get_comb(n - free, i) * free_pw[i]) % 998244353;       int lft = n - free - i;       long long coef = pw2[lft];       if ((lft & 1) == 0) {         coef = (coef - get_comb(lft, lft / 2) + 998244353) % 998244353;       }       coef = (coef * inv[2]) % 998244353;       ans = (ans + (w * coef) % 998244353) % 998244353;     }     printf( %I64d n , (aux * ans) % 998244353);   }   int main() {     ios_base ::sync_with_stdio(false);     cin.tie(NULL);     input();     solve();     return 0;   }   