// SIGMA BOY hihihihihihihi
#define se second
#define fi first
#define pb push_back
#define pob pop_back
#define bitebi __builtin_popcountll
#include <bits/stdc++.h>
using namespace std ;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> pll;
const ll Mod = 1e9+7;
const ll Maxn = 1e5+1;
const int oo = 1e9;
ll n , k , a[Maxn],m,Before[Maxn],st[Maxn*4],dp[Maxn];
pair<ll,ll> idrl[Maxn];
vector<ll> v;
unordered_map<ll,ll> id;
void Nen()
{
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());
for ( int i = 0 ; i < v.size() ; ++i)
id[v[i]]=i;
m = v.size();
for ( int i = 0 ; i < v.size() ; ++i)
{
idrl[i].fi = upper_bound(v.begin(),v.end(),v[i]-k) - v.begin() - 1 ;
idrl[i].se = lower_bound(v.begin(),v.end(),v[i]+k) - v.begin() ;
//cerr << i << ' ' << v[i] << ' ' << idrl[i].fi << ' ' << idrl[i].se << '\n';
}
}
void Update ( int id , int l , int r , int location , ll val )
{
if(location<l||location>r) return;
if(l==r)
{
st[id] = max(st[id],val);
return;
}
int mid = (l+r)/2;
Update(id*2,l,mid,location,val);
Update(id*2+1,mid+1,r,location,val);
st[id] = max(st[id*2],st[id*2+1]);
}
int Get ( int id , int l , int r , int u , int v )
// Return Max Buoc
{
if(r<u||v<l) return -oo;
if(u<=l&&r<=v) return st[id];
int mid = (l+r)/2;
return max(Get(id*2,l,mid,u,v),Get(id*2+1,mid+1,r,u,v));
}
void DP()
{
for (int i = 1 ; i <= n ; ++i)
{
int ID = id[a[i]];
int val = 0 ;
if(idrl[ID].fi>=0) val = max(val,Get(1,0,m-1,0,idrl[ID].fi));
if(idrl[ID].se<m) val = max(val,Get(1,0,m-1,idrl[ID].se,m-1));
dp[i] = val + 1;
Update(1,0,m-1,ID,dp[i]);
}
}
void Print()
{
cout << *max_element(dp+1,dp+1+n) << '\n';
int idEnd = max_element(dp+1,dp+1+n) - dp;
//for (int i = 1 ; i <= n ; ++i) cerr << dp[i] << ' ' ;
vector<int> v;
while(idEnd)
{
v.pb(idEnd);
int IDcur = idEnd;
while(idEnd)
{
if(abs(a[idEnd]-a[IDcur])>=k&&dp[IDcur]==dp[idEnd]+1) break;
idEnd--;
}
}
reverse(v.begin(),v.end());
for ( auto x : v ) cout << x << ' ' ;
}
void Do()
{
cin >> n >> k ;
for (int i = 1 ; i <= n ; ++i)
{
cin >> a[i];
v.pb(a[i]);
}
Nen();
DP();
Print();
}
signed main ()
{
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#define task "test"
if(fopen(task".inp", "r")){
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
int ntest=1;
while(ntest--) Do();
cerr<<"\nTime elapsed: "<<1000*clock()/CLOCKS_PER_SEC<<"ms\n";
}
Ly8gU0lHTUEgQk9ZIGhpaGloaWhpaGloaWhpCgojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgcG9iIHBvcF9iYWNrCiNkZWZpbmUgYml0ZWJpIF9fYnVpbHRpbl9wb3Bjb3VudGxsCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZCA7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOwp0eXBlZGVmIHBhaXI8bGwsbGw+IHBsbDsKCmNvbnN0IGxsIE1vZCA9IDFlOSs3Owpjb25zdCBsbCBNYXhuID0gMWU1KzE7CmNvbnN0IGludCBvbyA9IDFlOTsKCmxsIG4gLCBrICwgYVtNYXhuXSxtLEJlZm9yZVtNYXhuXSxzdFtNYXhuKjRdLGRwW01heG5dOwpwYWlyPGxsLGxsPiBpZHJsW01heG5dOwp2ZWN0b3I8bGw+IHY7CnVub3JkZXJlZF9tYXA8bGwsbGw+IGlkOwoKdm9pZCBOZW4oKQp7CiAgICBzb3J0KHYuYmVnaW4oKSx2LmVuZCgpKTsKICAgIHYuZXJhc2UodW5pcXVlKHYuYmVnaW4oKSx2LmVuZCgpKSx2LmVuZCgpKTsKICAgIGZvciAoIGludCBpID0gMCA7IGkgPCB2LnNpemUoKSA7ICsraSkKICAgICAgICBpZFt2W2ldXT1pOwoKICAgIG0gPSB2LnNpemUoKTsKICAgIGZvciAoIGludCBpID0gMCA7IGkgPCB2LnNpemUoKSA7ICsraSkKICAgIHsKICAgICAgICBpZHJsW2ldLmZpID0gdXBwZXJfYm91bmQodi5iZWdpbigpLHYuZW5kKCksdltpXS1rKSAtIHYuYmVnaW4oKSAtIDEgOwogICAgICAgIGlkcmxbaV0uc2UgPSBsb3dlcl9ib3VuZCh2LmJlZ2luKCksdi5lbmQoKSx2W2ldK2spIC0gdi5iZWdpbigpIDsKICAgICAgICAvL2NlcnIgPDwgaSA8PCAnICcgPDwgdltpXSA8PCAnICcgPDwgaWRybFtpXS5maSA8PCAnICcgPDwgaWRybFtpXS5zZSA8PCAnXG4nOwogICAgfQp9Cgp2b2lkIFVwZGF0ZSAoIGludCBpZCAsIGludCBsICwgaW50IHIgLCBpbnQgbG9jYXRpb24gLCBsbCB2YWwgKQp7CiAgICBpZihsb2NhdGlvbjxsfHxsb2NhdGlvbj5yKSByZXR1cm47CiAgICBpZihsPT1yKQogICAgewogICAgICAgIHN0W2lkXSA9IG1heChzdFtpZF0sdmFsKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgbWlkID0gKGwrcikvMjsKICAgIFVwZGF0ZShpZCoyLGwsbWlkLGxvY2F0aW9uLHZhbCk7CiAgICBVcGRhdGUoaWQqMisxLG1pZCsxLHIsbG9jYXRpb24sdmFsKTsKICAgIHN0W2lkXSA9IG1heChzdFtpZCoyXSxzdFtpZCoyKzFdKTsKfQoKaW50IEdldCAoIGludCBpZCAsIGludCBsICwgaW50IHIgLCBpbnQgdSAsIGludCB2ICkKLy8gUmV0dXJuIE1heCBCdW9jCnsKICAgIGlmKHI8dXx8djxsKSByZXR1cm4gLW9vOwogICAgaWYodTw9bCYmcjw9dikgcmV0dXJuIHN0W2lkXTsKICAgIGludCBtaWQgPSAobCtyKS8yOwogICAgcmV0dXJuIG1heChHZXQoaWQqMixsLG1pZCx1LHYpLEdldChpZCoyKzEsbWlkKzEscix1LHYpKTsKfQoKdm9pZCBEUCgpCnsKICAgIGZvciAoaW50IGkgPSAxIDsgaSA8PSBuIDsgKytpKQogICAgewogICAgICAgIGludCBJRCA9IGlkW2FbaV1dOwogICAgICAgIGludCB2YWwgPSAwIDsKICAgICAgICBpZihpZHJsW0lEXS5maT49MCkgdmFsID0gbWF4KHZhbCxHZXQoMSwwLG0tMSwwLGlkcmxbSURdLmZpKSk7CiAgICAgICAgaWYoaWRybFtJRF0uc2U8bSkgdmFsID0gbWF4KHZhbCxHZXQoMSwwLG0tMSxpZHJsW0lEXS5zZSxtLTEpKTsKICAgICAgICBkcFtpXSA9IHZhbCArIDE7CiAgICAgICAgVXBkYXRlKDEsMCxtLTEsSUQsZHBbaV0pOwogICAgfQp9Cgp2b2lkIFByaW50KCkKewogICAgY291dCA8PCAqbWF4X2VsZW1lbnQoZHArMSxkcCsxK24pIDw8ICdcbic7CiAgICBpbnQgaWRFbmQgPSBtYXhfZWxlbWVudChkcCsxLGRwKzErbikgLSBkcDsKICAgIC8vZm9yIChpbnQgaSA9IDEgOyBpIDw9IG4gOyArK2kpIGNlcnIgPDwgZHBbaV0gPDwgJyAnIDsKICAgIHZlY3RvcjxpbnQ+IHY7CiAgICB3aGlsZShpZEVuZCkKICAgIHsKICAgICAgICB2LnBiKGlkRW5kKTsKICAgICAgICBpbnQgSURjdXIgPSBpZEVuZDsKICAgICAgICB3aGlsZShpZEVuZCkKICAgICAgICB7CiAgICAgICAgICAgIGlmKGFicyhhW2lkRW5kXS1hW0lEY3VyXSk+PWsmJmRwW0lEY3VyXT09ZHBbaWRFbmRdKzEpIGJyZWFrOwogICAgICAgICAgICBpZEVuZC0tOwogICAgICAgIH0KICAgIH0KCiAgICByZXZlcnNlKHYuYmVnaW4oKSx2LmVuZCgpKTsKICAgIGZvciAoIGF1dG8geCA6IHYgKSBjb3V0IDw8IHggPDwgJyAnIDsKfQoKdm9pZCBEbygpCnsKICAgIGNpbiA+PiBuID4+IGsgOwogICAgZm9yIChpbnQgaSA9IDEgOyBpIDw9IG4gOyArK2kpCiAgICB7CiAgICAgICAgY2luID4+IGFbaV07CiAgICAgICAgdi5wYihhW2ldKTsKICAgIH0KICAgIE5lbigpOwogICAgRFAoKTsKICAgIFByaW50KCk7Cn0KCnNpZ25lZCBtYWluICgpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCksIGNpbi50aWUoMCksIGNvdXQudGllKDApOwojZGVmaW5lIHRhc2sgInRlc3QiCiAgICBpZihmb3Blbih0YXNrIi5pbnAiLCAiciIpKXsKICAgICAgICBmcmVvcGVuKHRhc2siLmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4odGFzayIub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQogICAgaW50IG50ZXN0PTE7CiAgICB3aGlsZShudGVzdC0tKSBEbygpOwoKICAgIGNlcnI8PCJcblRpbWUgZWxhcHNlZDogIjw8MTAwMCpjbG9jaygpL0NMT0NLU19QRVJfU0VDPDwibXNcbiI7Cn0=