#define STAT 23
/* wc2017b2 data-shape probe v4. Leaks one statistic per submission:
value = STAT-specific count/50 (or /1e6 for sums), padded by 300 pages. */
static char pad[16 << 20];
static inline void dumpv(unsigned long long v) {
if (v > 7000) v = 7000;
volatile char *p = pad;
for (unsigned long long i = 0; i < v; i++) p[i * 4096] = 1;
}
#ifndef STAT
#define STAT 0
#endif
static unsigned htab[1 << 20];
static void hclear(void) { for (int i = 0; i < (1 << 20); i++) htab[i] = 0xFFFFFFFFu; }
/* returns 1 if key already present, else inserts */
static int hdup(unsigned key) {
unsigned h = (key * 2654435761u) >> 12;
for (int t = 0; t < 8; t++) {
unsigned idx = (h + t) & ((1 << 20) - 1);
if (htab[idx] == 0xFFFFFFFFu) { htab[idx] = key; return 0; }
if (htab[idx] == key) return 1;
}
return 0;
}
void solve(int n, int q, char *s1, char *s2, int *q_x, int *q_y, int *q_len, unsigned *ans) {
unsigned long long v = 0;
int c = 0;
long long s = 0;
#if STAT == 0 /* duplicate x count */
hclear(); for (int i = 0; i < q; i++) c += hdup((unsigned)q_x[i] * 3u + 1u); v = c / 50;
#elif STAT == 1 /* duplicate y count */
hclear(); for (int i = 0; i < q; i++) c += hdup((unsigned)q_y[i] * 3u + 1u); v = c / 50;
#elif STAT == 2 /* duplicate (x,y) */
hclear(); for (int i = 0; i < q; i++) c += hdup((unsigned)q_x[i] * 1000003u + (unsigned)q_y[i] + 7u); v = c / 50;
#elif STAT == 3 /* duplicate (x-y) */
hclear(); for (int i = 0; i < q; i++) c += hdup((unsigned)(q_x[i] - q_y[i] + n) * 4u + 2u); v = c / 50;
#elif STAT == 4 /* duplicate bucket (x&63,y&63) */
hclear(); for (int i = 0; i < q; i++) c += hdup((unsigned)(((q_x[i] & 63) << 6) | (q_y[i] & 63)) * 5u + 3u); v = c / 50;
#elif STAT == 5 /* duplicate (bucket, xw-yw) : xw=x>>6,yw=y>>6 */
hclear(); for (int i = 0; i < q; i++) { int k = (((q_x[i] & 63) << 6) | (q_y[i] & 63)); int d = (q_x[i] >> 6) - (q_y[i] >> 6); c += hdup((unsigned)(k * 20011 + (d + 10000))); } v = c / 50;
#elif STAT == 6 /* duplicate x>>6 */
hclear(); for (int i = 0; i < q; i++) c += hdup((unsigned)(q_x[i] >> 6) * 7u + 5u); v = c / 50;
#elif STAT == 7 /* sum(l)/1e6 */
for (int i = 0; i < q; i++) s += (unsigned)q_len[i]; v = (unsigned long long)(s / 10000000);
#elif STAT == 8 /* count l <= n/8 */
for (int i = 0; i < q; i++) if (q_len[i] <= n / 8) c++; v = c / 50;
#elif STAT == 9 /* count l >= 3n/4 */
for (int i = 0; i < q; i++) if (q_len[i] >= (3 * n) / 4) c++; v = c / 50;
#elif STAT == 10 /* min l (raw) */
{ int mn = 1 << 30; for (int i = 0; i < q; i++) if (q_len[i] < mn) mn = q_len[i]; v = mn; }
#elif STAT == 11 /* max l / 50 */
{ int mx = 0; for (int i = 0; i < q; i++) if (q_len[i] > mx) mx = q_len[i]; v = mx / 50; }
#elif STAT == 12 /* #i with x_i > x_{i+1} (sortedness) */
for (int i = 0; i + 1 < q; i++) if (q_x[i] > q_x[i + 1]) c++; v = c / 50;
#elif STAT == 13 /* count x > y */
for (int i = 0; i < q; i++) if (q_x[i] > q_y[i]) c++; v = c / 50;
#elif STAT == 14 /* checksum s1: sum (s1[i]-'0')*(i%97+1) / 1e7 */
for (int i = 0; i < n; i++) s += (long long)(s1[i] - '0') * (i % 7 + 1); v = (unsigned long long)(s / 1000);
#elif STAT == 15 /* checksum s2 */
for (int i = 0; i < n; i++) s += (long long)(s2[i] - '0') * (i % 7 + 1); v = (unsigned long long)(s / 1000);
#elif STAT == 16 /* count of l == n - max(x,y) /50 */
for (int i = 0; i < q; i++) { int m = q_x[i] > q_y[i] ? q_x[i] : q_y[i]; if (q_len[i] == n - m) c++; } v = c / 50;
#elif STAT == 17 /* x[0]/100 */
v = q ? (unsigned)q_x[0] / 100 : 0;
#elif STAT == 18 /* duplicate (x, y>>6) : sharing s1 requires same x */
hclear(); for (int i = 0; i < q; i++) c += hdup((unsigned)q_x[i] * 100003u + (unsigned)(q_y[i] >> 6) + 11u); v = c / 50;
#elif STAT == 19 /* duplicate x among x>=y class only */
hclear(); for (int i = 0; i < q; i++) if (q_x[i] >= q_y[i]) c += hdup((unsigned)q_x[i] * 3u + 1u); v = c / 50;
#elif STAT == 20 /* sum of (count_bucket_max) : max bucket population */
{ static int bc[4096]; for (int i = 0; i < 4096; i++) bc[i] = 0; for (int i = 0; i < q; i++) bc[((q_x[i]&63)<<6)|(q_y[i]&63)]++; int mx = 0; for (int i = 0; i < 4096; i++) if (bc[i] > mx) mx = bc[i]; v = mx; }
#elif STAT == 21 /* l for query 0, /50 */
v = q ? (unsigned)q_len[0] / 50 : 0;
#elif STAT == 22 /* count of x & 63 != 0 ... (unused) */
for (int i = 0; i < q; i++) if ((q_x[i] & 63) == 0) c++; v = c / 50;
#elif STAT == 23 /* duplicate (x>>6, y>>6) pairs */
hclear(); for (int i = 0; i < q; i++) c += hdup((unsigned)(q_x[i] >> 6) * 20011u + (unsigned)(q_y[i] >> 6) + 13u); v = c / 50;
#endif
dumpv(300 + v);
for (int i = 0; i < q; i++) ans[i] = 0;
}
//zzzzzzzzzzzzzzzzzzzzzzzzz