#define PROBE 0
static unsigned long long ndistinct_ad(int q, int *qx, int *qy) {
static unsigned char seen[2 * 300005];
int cnt = 0;
for (int k = 0; k < q; k++) {
int d = qy[k] - qx[k]; if (d < 0) d = -d;
if (!seen[d]) { seen[d] = 1; cnt++; }
}
return (unsigned long long)cnt;
}
void solve(int n, int q, char *s1, char *s2, int *qx, int *qy, int *ql, unsigned *ans) {
(void)n; (void)s1; (void)s2; (void)ans;
unsigned long long S = 0, v = 0;
int i;
switch (PROBE) {
case 0: v = 0; break; /* calibration: harness pages only */
case 1: for (i = 0; i < q; i++) S += (unsigned)ql[i]; v = S >> 20; break;
case 2: for (i = 0; i < q; i++) S += (unsigned)ql[i]; v = (S >> 4) & 0xFFFF; break;
case 3: v = ndistinct_ad(q, qx, qy) >> 2; break;
case 4: { unsigned long long c = 0; for (i = 0; i < q; i++) if ((unsigned)ql[i] > (unsigned)n / 2) c++; v = c >> 2; } break;
case 5: { unsigned long long c = 0; for (i = 0; i < q; i++) if ((unsigned)ql[i] > (unsigned)n / 4) c++; v = c >> 2; } break;
case 6: { int m = 0; for (i = 0; i < q; i++) if ((int)ql[i] > m) m = (int)ql[i]; v = (unsigned)m >> 8; } break;
case 8: { /* match rate at delta 0: bits where s1[i] beats s2[i], over all i */
unsigned long long c = 0;
for (i = 0; i < n; i++) {
int a = s1[i] - '0', b = s2[i] - '0';
if (a == (b + 2) % 3) c++;
}
v = c >> 6; } break;
default: v = 0; break;
}
touch(v);
}