text: The sum of lengths of these cycles should be less than or equal to s, and the array should be sorted after applying these q operations.If there are several possible answers with the optimal q, print any of them.Examples Input 5 5 3 2 3 1 1 Output 1 5 1 4 2 3 5 Input 4 3 2 1 4 3 Output -1 Input 2 0 2 2 Output 0 Note In the first example, it's also possible to sort the array with two operations of total length 5: first apply the cycle 1 → 4 → 1 (of length 2), then apply the cycle 2 → 3 → 5 → 2 (of length 3).However, it would be wrong answer as you're asked to use the minimal possible number of operations, which is 1 in that case.In the second example, it's possible to the sort the array with two cycles of total length 4 (1 → 2 → 1 and 3 → 4 → 3).However, it's impossible to achieve the same using shorter cycles, which is required by s=3.In the third example, the array is already sorted, so no operations are needed.Total length of empty set of cycles is considered to be zero.# Solution #include <bits/stdc++.h> using namespace std; const int MAXN = 300000; map<int, int> mapa; map<pair<int, int>, vector<int>> pos; vector<int> g[MAXN]; int ptr[MAXN]; int used[MAXN]; void euler(int v, vector<int> &res) { used[v] = true; for (; ptr[v] < (int)(g[v]).size();) { ++ptr[v]; int u = g[v][ptr[v] - 1]; euler(u, res); res.push_back(u); } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, s; cin >> n >> s; int k = 0; vector<int> a(n); for (int i = 0; i < n; ++i) { cin >> a[i]; } vector<int> b = a; sort((b).begin(), (b).end()); int m = 0; for (int i = 0; i < n; ++i) { if (a[i] == b[i]) { continue; } ++m; if (!mapa.count(b[i])) { mapa[b[i]] = k++; } } if (m > s) { cout << -1 << endl; return 0; } for (int i = 0; i < n; ++i) { if (a[i] == b[i]) { continue; } a[i] = mapa[a[i]]; b[i] = mapa[b[i]]; g[b[i]].push_back(a[i]); pos[{b[i], a[i]}].push_back(i); } vector<vector<int>> cycles; for (int i = 0; i < k; ++i) { if (!