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;
long long a[100005], h[100005], trc[100005];
pair<int, int> st[100005 << 2];
void build(int i, int dau, int cuoi) {
  st[i] = make_pair(0, -1);
  if (dau == cuoi) return;
  int giua = (dau + cuoi) >> 1;
  build(i << 1, dau, giua);
  build(i << 1 | 1, giua + 1, cuoi);
}
void upd(int i, int dau, int cuoi, int pos, pair<int, int> p) {
  if (dau == cuoi)
    st[i] = p;
  else {
    int i1 = i << 1, i2 = i1 | 1, giua = (dau + cuoi) >> 1;
    if (pos <= giua)
      upd(i1, dau, giua, pos, p);
    else
      upd(i2, giua + 1, cuoi, pos, p);
    if (st[i1].first >= st[i2].first)
      st[i] = st[i1];
    else
      st[i] = st[i2];
  }
}
pair<int, int> qr(int i, int dau, int cuoi, int l, int r) {
  if (dau == l && cuoi == r) return st[i];
  int i1 = i << 1, i2 = i1 | 1, giua = (dau + cuoi) >> 1;
  if (r <= giua)
    return qr(i1, dau, giua, l, r);
  else if (l > giua)
    return qr(i2, giua + 1, cuoi, l, r);
  else {
    pair<int, int> p1 = qr(i1, dau, giua, l, giua);
    pair<int, int> p2 = qr(i2, giua + 1, cuoi, giua + 1, r);
    if (p1.first >= p2.first) return p1;
    return p2;
  }
}
void path(int i) {
  if (i == -1) return;
  path(trc[i]);
  printf("%d ", i);
}
void input() {
  int i, n, d, l, r, id, res, resid;
  pair<int, int> p, p1, p2;
  scanf("%d %d", &n, &d);
  for ((i) = (1); (i) <= (n); (i)++) scanf("%I64d", &h[i]), a[i] = h[i];
  sort(a + 1, a + n + 1);
  res = 0;
  build(1, 1, n);
  for ((i) = (1); (i) <= (n); (i)++) {
    id = lower_bound(a + 1, a + n + 1, h[i]) - a;
    l = upper_bound(a + 1, a + n + 1, h[i] - d) - a - 1;
    r = lower_bound(a + 1, a + n + 1, h[i] + d) - a;
    p1 = (l >= 1 ? qr(1, 1, n, 1, l) : make_pair(0, -1));
    p2 = (r <= n ? qr(1, 1, n, r, n) : make_pair(0, -1));
    if (p1.first >= p2.first)
      p.first = p1.first + 1, trc[i] = p1.second;
    else
      p.first = p2.first + 1, trc[i] = p2.second;
    p.second = i;
    upd(1, 1, n, id, p);
    if (p.first > res) res = p.first, resid = i;
  }
  printf("%d\n", res);
  path(resid);
}
int main() {
  input();
  return 0;
}
