Marmot found a row with n pillars. The i-th pillar has the height of hi meters. Starting from one pillar i1, Marmot wants to jump on the pillars i2, ..., ik. (1 ≤ i1 < i2 < ... < ik ≤ n). From a pillar i Marmot can jump on a pillar j only if i < j and |hi - hj| ≥ d, where |x| is the absolute value of the number x.

Now Marmot is asking you find out a jump sequence with maximal length and print it.

Input

The first line contains two integers n and d (1 ≤ n ≤ 105, 0 ≤ d ≤ 109).

The second line contains n numbers h1, h2, ..., hn (1 ≤ hi ≤ 1015).

Output

The first line should contain one integer k, the maximal length of a jump sequence.

The second line should contain k integers i1, i2, ..., ik (1 ≤ i1 < i2 < ... < ik ≤ n), representing the pillars' indices from the maximal length jump sequence.

If there is more than one maximal length jump sequence, print any.

Examples

Input

5 2
1 3 6 7 4


Output

4
1 2 3 5 


Input

10 3
2 1 3 6 9 11 7 3 20 18


Output

6
1 4 6 7 8 9 

Note

In the first example Marmot chooses the pillars 1, 2, 3, 5 with the heights 1, 3, 6, 4. Another jump sequence of length 4 is 1, 2, 4, 5.
#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:667772160")
template <class T1>
void deb(T1 e1) {
  cout << e1 << endl;
}
template <class T1, class T2>
void deb(T1 e1, T2 e2) {
  cout << e1 << " " << e2 << endl;
}
template <class T1, class T2, class T3>
void deb(T1 e1, T2 e2, T3 e3) {
  cout << e1 << " " << e2 << " " << e3 << endl;
}
template <class T1, class T2, class T3, class T4>
void deb(T1 e1, T2 e2, T3 e3, T4 e4) {
  cout << e1 << " " << e2 << " " << e3 << " " << e4 << endl;
}
template <class T1, class T2, class T3, class T4, class T5>
void deb(T1 e1, T2 e2, T3 e3, T4 e4, T5 e5) {
  cout << e1 << " " << e2 << " " << e3 << " " << e4 << " " << e5 << endl;
}
template <class T1, class T2, class T3, class T4, class T5, class T6>
void deb(T1 e1, T2 e2, T3 e3, T4 e4, T5 e5, T6 e6) {
  cout << e1 << " " << e2 << " " << e3 << " " << e4 << " " << e5 << " " << e6
       << endl;
}
struct data {
  long long valu;
  int id, l_id, r_id, next, index;
};
data arr[100000 + 7];
bool cmp_valu(data a, data b) { return a.valu < b.valu; }
bool cmp_ind(data a, data b) { return a.index < b.index; }
pair<int, int> tree[4 * 100000 + 7];
void update(int nd, int l, int r, int id, pair<int, int> tp) {
  if (r < id or l > id) return;
  if (l == r) {
    tree[nd] = max(tree[nd], tp);
    return;
  }
  int mid = (l + r) / 2, lft = 2 * nd, rgt = lft + 1;
  update(lft, l, mid, id, tp);
  update(rgt, mid + 1, r, id, tp);
  tree[nd] = max(tree[lft], tree[rgt]);
}
pair<int, int> query(int nd, int l, int r, int i, int j) {
  if (i > j) return make_pair(0, 0);
  if (r < i or l > j) return make_pair(0, 0);
  if (l >= i and r <= j) return tree[nd];
  int mid = (l + r) / 2, lft = 2 * nd, rgt = lft + 1;
  return max(query(lft, l, mid, i, j), query(rgt, mid + 1, r, i, j));
}
int main() {
  long long n, d;
  scanf("%lld %lld", &n, &d);
  for (int i = 0; i < n; i++) {
    scanf("%lld", &arr[i].valu);
    arr[i].index = i;
  }
  sort(arr, arr + n, cmp_valu);
  int id = 0;
  for (int i = 0; i < n; i++) {
    if (i == 0 or arr[i].valu != arr[i - 1].valu)
      arr[i].id = ++id;
    else
      arr[i].id = id;
  }
  int tp = -1;
  for (int i = 0; i < n; i++) {
    while (arr[i].valu - arr[tp + 1].valu >= d) tp++;
    if (tp == -1)
      arr[i].l_id = 0;
    else
      arr[i].l_id = arr[tp].id;
  }
  tp = n;
  for (int i = n - 1; i >= 0; i--) {
    while (tp > 0 and abs(arr[tp - 1].valu - arr[i].valu) >= d) tp--;
    if (tp == n)
      arr[i].r_id = id + 1;
    else
      arr[i].r_id = arr[tp].id;
  }
  sort(arr, arr + n, cmp_ind);
  pair<int, int> temp, ans = make_pair(-1, -1), tmp;
  for (int i = n - 1; i >= 0; i--) {
    temp = query(1, 1, id, 1, arr[i].l_id);
    tmp = query(1, 1, id, arr[i].r_id, id);
    temp = max(temp, tmp);
    if (temp.first == 0)
      arr[i].next = -1;
    else
      arr[i].next = temp.second;
    update(1, 1, id, arr[i].id, make_pair(temp.first + 1, i));
    if (temp.first >= ans.first) ans = make_pair(temp.first + 1, i);
  }
  vector<int> fans;
  int a = ans.second;
  while (a != -1) {
    fans.push_back(a + 1);
    a = arr[a].next;
  }
  deb(ans.first);
  for (int i = 0; i < fans.size(); i++) {
    if (i > 0) printf(" ");
    printf("%d", fans[i]);
  }
  printf("\n");
  return 0;
}
