func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 2e5 + 10, T = 3010, size = 1 << 20, mod = 998244353, inf = 2e9;   const long long INF = 1e15;   template <class o>   void qr(o &x) {     char c = getchar();     x = 0;     int f = 1;     while (!isdigit(c)) {       if (c ==  - ) f = -1;       c = getchar();     }     while (isdigit(c)) x = x * 10 + c -  0 , c = getchar();     x *= f;   }   template <class o>   void qw(o x) {     if (x / 10) qw(x / 10);     putchar(x % 10 +  0 );   }   template <class o>   void pr1(o x) {     if (x < 0) x = -x, putchar( - );     qw(x);     putchar(   );   }   template <class o>   void pr2(o x) {     if (x < 0) x = -x, putchar( - );     qw(x);     putchar(  n );   }   int n, k, m, Q, a[N], b[N], c[N], R[N], lim[N], val[N], id[N], tot, ans, cnt;   int bl[T], br[T], pos[N], w[T][1 << 14], tag[N];   void ask() {     if (cnt)       puts( -1 );     else       pr2(ans);   }   void add(int x, int y, int z) {     if (x > y) return;     int p = pos[x], q = pos[y];     if (p == q) {       for (auto i = x; i <= y; i++) w[p][val[i]]--, w[p][val[i] ^= z]++;       return;     }     for (auto i = p + 1; i <= q - 1; i++) tag[i] ^= z;     for (auto i = x; i <= br[p]; i++) w[p][val[i]]--, w[p][val[i] ^= z]++;     for (auto i = bl[q]; i <= y; i++) w[q][val[i]]--, w[q][val[i] ^= z]++;   }   int count(int x, int y) {     if (x > y) return 0;     int p = pos[x], q = pos[y], s = 0;     if (p == q) {       for (auto i = x; i <= y; i++) s += (val[i] != tag[p]);       return s;     }     for (auto i = p + 1; i <= q - 1; i++) s += w[i][tag[i]];     for (auto i = x; i <= br[p]; i++) s += (val[i] == tag[p]);     for (auto i = bl[q]; i <= y; i++) s += (val[i] == tag[q]);     return y - x + 1 - s;   }   void modify(int x, int y) {     if (x > n) return;     int z = x % k;     cnt -= count(lim[z], R[z]);     ans -= count(id[x], R[z]);     add(id[x], R[z], y);     cnt += count(lim[z], R[z]);     ans += count(id[x], R[z]);   }   int main() {     qr(n);     qr(k);     m = n - k + 1;     qr(Q);     for (auto i = 1; i <= n; i++) qr(a[i]);     for (auto i = 1; i <= n; i++) qr(b[i]), c[i] = a[i] ^ b[i];     for (auto i = n; i >= 1; i--) c[i] ^= c[i - 1];     for (auto i = 0; i <= k - 1; i++) {       int s = (n - i) / k + (i > 0), j, d = 0;       for (j = !i ? k : i; s--; j += k) val[++tot] = d = c[j] ^ d, id[j] = tot;       j -= k;       R[i] = tot;       if (j > m)         lim[i] = tot, cnt += !!val[tot];       else         lim[i] = tot + 1;     }     for (auto i = 1; i <= tot; i++) ans += !!val[i];     int len = max(sqrt(1.0 * n / k + 0.5), ceil(1.0 * n / 3000)), t = n / len;     for (auto i = 1; i <= t; i++) bl[i] = br[i - 1] + 1, br[i] = i * len;     if (R[t] < n) t++, bl[t] = br[t - 1] + 1, br[t] = n;     for (auto i = 1; i <= t; i++)       for (auto j = bl[i]; j <= br[i]; j++) pos[j] = i, w[i][val[j]]++;     ask();     while (Q--) {       char s[5];       int x, y;       scanf( %s , s);       qr(x);       qr(y);       if (s[0] ==  a )         modify(x, a[x] ^ y), modify(x + 1, a[x] ^ y), a[x] = y;       else         modify(x, b[x] ^ y), modify(x + 1, b[x] ^ y), b[x] = y;       ask();     }     return 0;   }   