Problem: You are given an array of n positive integers a_1, a_2, ..., a_n. You can perform the following operation any number of times: select several distinct indices i_1, i_2, ..., i_k (1 ≤ i_j ≤ n) and move the number standing at the position i_1 to the position i_2, the number at the position i_2 to the position i_3, ..., the number at the position i_k to the position i_1. In other words, the operation cyclically shifts elements: i_1 → i_2 → … i_k → i_1.

For example, if you have n=4, an array a_1=10, a_2=20, a_3=30, a_4=40, and you choose three indices i_1=2, i_2=1, i_3=4, then the resulting array would become a_1=20, a_2=40, a_3=30, a_4=10.

Your goal is to make the array sorted in non-decreasing order with the minimum number of operations. The additional constraint is that the sum of cycle lengths over all operations should be less than or equal to a number s. If it's impossible to sort the array while satisfying that constraint, your solution should report that as well.

Input

The first line of the input contains two integers n and s (1 ≤ n ≤ 200 000, 0 ≤ s ≤ 200 000)—the number of elements in the array and the upper bound on the sum of cycle lengths.

The next line contains n integers a_1, a_2, ..., a_n—elements of the array (1 ≤ a_i ≤ 10^9).

Output

If it's impossible to sort the array using cycles of total length not exceeding s, print a single number "-1" (quotes for clarity).

Otherwise, print a single number q— the minimum number of operations required to sort the array.

On the next 2 ⋅ q lines print descriptions of operations in the order they are applied to the array. The description of i-th operation begins with a single line containing one integer k (1 ≤ k ≤ n)—the length of the cycle (that is, the number of selected indices). The next line should contain k distinct integers i_1, i_2, ..., i_k (1 ≤ i_j ≤ n)—the indices of the cycle.

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 (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
const int sz = 2e5 + 10;
int to[sz], pr[sz], si[sz], cyq = 0;
bool us[sz];
vector<int> cy[sz];
int find_se(int v) {
  if (v != pr[v]) pr[v] = find_se(pr[v]);
  return pr[v];
}
void merge(int u, int v) {
  u = find_se(u), v = find_se(v);
  if (u != v) {
    if (si[v] > si[u]) swap(u, v);
    si[u] += si[v];
    pr[v] = u;
  }
}
void pr_cy(vector<int> &ve) {
  printf("%d\n", ve.size());
  for (int a = 0; a < ve.size(); a++) printf("%d ", ve[a] + 1);
  printf("\n");
}
int main() {
  int n, s;
  cin >> n >> s;
  map<int, int> q;
  map<int, set<int> > se;
  int ar[n], n2 = 0;
  for (int a = 0; a < n; a++) {
    scanf("%d", &ar[a]);
    q[ar[a]]++;
  }
  for (auto it = q.begin(); it != q.end(); it++) {
    for (int a = 0; a < (*it).second; a++) {
      se[(*it).first].insert(n2), n2++;
    }
  }
  for (int a = 0; a < n; a++) {
    if (se[ar[a]].find(a) != se[ar[a]].end()) {
      se[ar[a]].erase(a), ar[a] = -1;
    } else
      s--;
  }
  if (s >= 0) {
    for (int a = 0; a < n; a++) {
      if (ar[a] != -1) {
        to[a] = *(se[ar[a]].begin());
        se[ar[a]].erase(se[ar[a]].begin());
      }
    }
    map<int, vector<int> > sp;
    for (int a = 0; a < n; a++)
      if (ar[a] != -1) sp[ar[a]].push_back(a);
    for (int a = 0; a < n; a++) {
      pr[a] = a, si[a] = 1;
    }
    for (int a = 0; a < n; a++) {
      if (ar[a] != -1 and us[a] == 0) {
        us[a] = 1;
        int cu = to[a];
        while (us[cu] == 0) {
          merge(a, cu), us[cu] = 1, cu = to[cu];
        }
      }
    }
    for (auto it = sp.begin(); it != sp.end(); it++) {
      vector<int> &ve = (*it).second;
      for (int a = 1; a < ve.size(); a++) {
        int u = find_se(ve[0]), v = find_se(ve[a]);
        if (u != v) {
          swap(to[ve[0]], to[ve[a]]);
          merge(u, v);
        }
      }
    }
    for (int a = 0; a < n; a++) us[a] = 0;
    for (int a = 0; a < n; a++) {
      if (ar[a] != -1 and us[a] == 0) {
        int cu = a;
        while (us[cu] == 0) {
          cy[cyq].push_back(cu), us[cu] = 1, cu = to[cu];
        }
        cyq++;
      }
    }
    int yk = 0;
    vector<int> cy1, cy2;
    if (s >= 2 and cyq >= 2) {
      while (s and yk < cyq) {
        for (int b = 0; b < cy[yk].size(); b++) cy1.push_back(cy[yk][b]);
        cy2.push_back(cy[yk][0]);
        s--, yk++;
      }
      reverse(cy2.begin(), cy2.end());
    }
    int an = cyq - yk;
    if (cy1.size()) an += 2;
    cout << an << "\n";
    if (cy1.size()) {
      pr_cy(cy1), pr_cy(cy2);
    }
    while (yk < cyq) {
      pr_cy(cy[yk]), yk++;
    }
  } else
    cout << -1;
}