template <typename T> intMinRotation(const T& s){ constint n = s.size(); int i = 0, j = 1, k = 0, t; while (i < n && j < n && k < n) { t = s[(i + k) % n] - s[(j + k) % n]; if (!t) { k++; } else { if (t > 0) i += k + 1; else j += k + 1; if (i == j) j++; k = 0; } } return std::min(i, j); }
std::vector<int> minp(1E6), primes; minp[1] = 1; for (int n = 2; n < minp.size(); n++) { if (!minp[n]) { minp[n] = n; primes.push_back(n); } for (int p : primes) { if (1ll * n * p >= minp.size()) break; minp[n * p] = p; if (p == minp[n]) { break; } } }
int opt, N, M; std::cin >> opt >> N >> M;
int p = *--std::ranges::upper_bound(primes, M);
if (opt == 1) { for (int n = 0; n < N; n++) { int X; std::cin >> X; X--;
std::vector<int> a(M); std::ranges::iota(a, 0); for (auto x : a) std::cout << (++x) << " ";
auto b = a; std::rotate(b.begin(), b.begin() + X, b.end()); for (auto x : b) std::cout << (++x) << " ";
auto c = a; std::rotate(c.begin(), c.begin() + (X % p), c.begin() + p); for (auto x : c) std::cout << (++x) << " ";
std::cout << "\n"; } } else { for (int n = 0; n < N; n++) { std::vector<int> a(M), b(M), c(M); for (auto& x : a) std::cin >> x; for (auto& x : b) std::cin >> x; for (auto& x : c) std::cin >> x;
int X; if (std::set(a.begin(), a.begin() + p).size() == 1) { int i = MinRotation(a); int j = MinRotation(b);
X = (i - j + M) % M; } else { int i = MinRotation(std::vector(a.begin(), a.begin() + p)); int j = MinRotation(std::vector(c.begin(), c.begin() + p)); int Xmodp = (i - j + p) % p; std::rotate(a.begin(), a.begin() + Xmodp, a.end());
if (a == b) { X = Xmodp; } else { X = Xmodp + p; } } std::cout << (++X) << "\n"; } }