/* -*- coding: utf-8 -*- * * 3775.cc: No.3775 Distant Swap - yukicoder */ #include #include #include #include using namespace std; /* constant */ const int MAX_N = 1000; /* typedef */ using pii = pair; using vpii = vector; /* global variables */ int ps[MAX_N], vs[MAX_N]; /* subroutines */ /* main */ int main() { int n, k; scanf("%d%d", &n, &k); for (int i = 0; i < n; i++) scanf("%d", ps + i); vpii ops; for (int i = 0; i < k; i++) { int l = 0; for (int j = i; j < n; j += k) vs[l++] = j; for (int j = l - 1; j >= 1; j--) for (int j0 = 0; j0 < j; j0++) { int v0 = vs[j0], v1 = vs[j0 + 1]; if (ps[v0] > ps[v1]) { ops.push_back({v0, v1}); swap(ps[v0], ps[v1]); } } } bool ok = true; for (int i = 0; ok && i + 1 < n; i++) ok = (ps[i] < ps[i + 1]); if (ok) { printf("%d\n", (int)ops.size()); for (auto [i, j]: ops) printf("%d %d\n", i + 1, j + 1); } else puts("-1"); return 0; }