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 MAXN = 1e5 + 10, MAX = 1e15 + 10;
struct FENWICK {
  vector<long long> val;
  pair<long long, long long> f[MAXN] = {};
  void upd(long long p, pair<long long, long long> v) {
    p = upper_bound(val.begin(), val.end(), p) - val.begin() - 1;
    for (; p < MAXN; p += p & -p) f[p] = max(f[p], v);
  }
  pair<long long, long long> find(long long p) {
    pair<long long, long long> res = {0, 0};
    p = upper_bound(val.begin(), val.end(), p) - val.begin() - 1;
    for (; p; p -= p & -p) res = max(res, f[p]);
    return res;
  }
  void build() {
    sort(val.begin(), val.end());
    val.resize(unique(val.begin(), val.end()) - val.begin());
  }
} f1, f2;
long long n, d, a[MAXN];
pair<long long, long long> back[MAXN];
int32_t main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> d;
  f1.val.push_back(0);
  f2.val.push_back(0);
  for (long long i = 0; i < n; ++i) {
    cin >> a[i];
    f1.val.push_back(a[i]);
    f2.val.push_back(MAX - a[i]);
  }
  f1.build();
  f2.build();
  for (long long i = 0; i < n; ++i) {
    pair<long long, long long> ans = {0, 0};
    if (a[i] > d) ans = max(ans, f1.find(a[i] - d));
    ans = max(ans, f2.find(MAX - a[i] - d));
    back[i] = {ans.first + 1, ans.second};
    f1.upd(a[i], {ans.first + 1, i + 1});
    f2.upd(MAX - a[i], {ans.first + 1, i + 1});
  }
  long long now = 0;
  for (long long i = 1; i < n; ++i)
    if (back[i].first > back[now].first) now = i;
  ++now;
  vector<long long> res;
  while (now) {
    res.push_back(now);
    now = back[now - 1].second;
  }
  reverse(res.begin(), res.end());
  cout << res.size() << '\n';
  for (auto i : res) cout << i << ' ';
  return 0;
}
