inlineint __read() { intq(0), t(1); charo(getchar()); while (o < '0' || o > '9') { if (o == '-') t = -1; o = getchar(); } for (; o >= '0' && o <= '9'; o = getchar()) q = (q << 1) + (q << 3) + (o ^ 48); return q * t; }
int q[maxn] = {0, 1, 2, 3}; int t[maxn];
signedmain() { freopen (".out", "w", stdout); int T = __read(); for (int test = 1; test <= T; ++test) { memset (t, 0, sizeof t);//每次都要清空桶 intans(maxn), cnt(0); int n = __read(), m = __read(), k = __read(); for (int i = 4; i <= n; ++i) q[i] = (q[i - 1] + q[i - 2] + q[i - 3]) % m + 1; int l = 1; while (q[l] > k && l <= n) ++l; for (int i = l; i <= n; ++i) { if (q[i] > k) continue;//无用状态直接不用考虑 if (!t[q[i]])++cnt; t[q[i]]++; while (l < i && (t[q[l]] > 1 || q[l] > k)) t[q[l]]--, ++l; if (cnt == k) ans = min(ans, i - l + 1); } printf ("Case %d: ", test); if (ans < maxn) printf ("%d\n", ans); elseputs("sequence nai"); } }