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;
const long long N = 300010, M = 3000010, INF = 0x3f3f3f3f;
long long n, d, cnt, ans, loc, a[N], b[N], f[N], c1[N], c2[N], pre[N];
inline long long Max(long long x, long long y) { return f[x] > f[y] ? x : y; }
inline long long Min(long long x, long long y) { return f[x] < f[y] ? x : y; }
inline void Swap(long long &x, long long &y) { x ^= y ^= x ^= y; }
long long ask1(long long x) {
  long long res = 0;
  for (; x; x -= x & -x) res = Max(c1[x], res);
  return res;
}
void add1(long long x, long long y) {
  for (; x <= cnt; x += x & -x) c1[x] = Max(c1[x], y);
}
long long ask2(long long x) {
  long long res = 0;
  for (; x <= cnt; x += x & -x) res = Max(c2[x], res);
  return res;
}
void add2(long long x, long long y) {
  for (; x; x -= x & -x) c2[x] = Max(c2[x], y);
}
void write(long long x) {
  if (!x) return;
  write(pre[x]);
  printf("%lld ", x);
}
int main() {
  scanf("%lld%lld", &n, &d);
  for (long long i = 1; i <= n; i++) scanf("%lld", &a[i]), b[i] = a[i];
  sort(b + 1, b + n + 1);
  cnt = unique(b + 1, b + n + 1) - b - 1;
  for (long long i = 1; i <= n; i++) {
    long long x = lower_bound(b + 1, b + cnt + 1, a[i] + d) - b;
    long long y = upper_bound(b + 1, b + cnt + 1, a[i] - d) - b - 1;
    long long j = Max(ask1(y), ask2(x));
    f[i] = f[j] + 1;
    pre[i] = j;
    long long pos = lower_bound(b + 1, b + cnt + 1, a[i]) - b;
    add1(pos, i), add2(pos, i);
  }
  for (long long i = 1; i <= n; i++)
    if (f[i] > ans) ans = f[i], loc = i;
  printf("%lld\n", ans);
  write(loc);
  return 0;
}
