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;
typedef vector<pair<long long, long long> > vpll;
const int M = 1e5 + 7;
const int N = 1e4 + 7;
const long long inf = 1e18;
const int mod = 2147483647;
long long n, d;
long long h[M];
int ant[M];
int dp[M];
map<long long, long long> a;
pair<long long, long long> t[M << 1];
int cont;
pair<long long, long long> op(pair<long long, long long> a,
                              pair<long long, long long> b) {
  return max(a, b);
}
void up(int i, pair<long long, long long> val) {
  for (t[i += n] = val; i > 1; i >>= 1) t[i >> 1] = op(t[i], t[i ^ 1]);
}
pair<long long, long long> que(int l, int r) {
  pair<long long, long long> ans = {0, 0};
  for (l += n, r += n; l < r; l >>= 1, r >>= 1) {
    if (l & 1) ans = op(ans, t[l++]);
    if (r & 1) ans = op(ans, t[--r]);
  }
  return ans;
}
void go() {
  cin >> n >> d;
  for (int i = 1; i < n + 1; i++) {
    cin >> h[i];
    a[h[i]] = 0;
  }
  for (pair<long long, long long> x : a) a[x.first] = cont++;
  for (int i = 1; i < n + 1; i++) {
    auto lit = a.upper_bound(h[i] - d);
    auto rit = a.lower_bound(h[i] + d);
    int li = (lit == a.end() ? n : (*lit).second);
    int ri = (rit == a.end() ? n : (*rit).second);
    pair<long long, long long> opt1 = que(0, li);
    pair<long long, long long> opt2 = que(ri, n);
    dp[i] = max(opt1.first, opt2.first) + 1;
    if (dp[i] == opt1.first + 1)
      ant[i] = opt1.second;
    else
      ant[i] = opt2.second;
    up(a[h[i]], {dp[i], i});
  }
  pair<int, int> best = {0, 0};
  for (int i = 1; i < n + 1; i++) best = max(best, {dp[i], i});
  vector<int> sol;
  while (best.second) {
    sol.push_back(best.second);
    best.second = ant[best.second];
  }
  reverse(sol.begin(), sol.end());
  cout << best.first << "\n";
  for (int x : sol) cout << x << " ";
  cout << "\n";
  ;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int tst = 1;
  for (int i = 0; i < tst; i++) go();
  return 0;
}
