#include <iostream>
#include <vector>
#include <algorithm>
int main() {
int n, k;
std::cin >> n >> k;
std::vector<int> rocks(n);
for (int i = 0; i < n; ++i) {
std::cin >> rocks[i];
}
// Resultant array which will contain the rocks in the smallest lexicographical order
std::vector<int> result;
// We need to sort segments where the weight difference is less than or equal to `k`
int start = 0;
while (start < n) {
int end = start;
// Find the segment which can be sorted (based on the weight difference condition)
while (end < n - 1 && std::abs(rocks[end + 1] - rocks[end]) <= k) {
end++;
}
// Create a subvector for this segment and sort it
std::vector<int> segment(rocks.begin() + start, rocks.begin() + end + 1);
std::sort(segment.begin(), segment.end());
// Append the sorted segment to the result
result.insert(result.end(), segment.begin(), segment.end());
// Move to the next segment
start = end + 1;
}
// Output the result, which should be the smallest lexicographical sequence
for (int val : result) {
std::cout << val << "\n";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKaW50IG1haW4oKSB7CiAgICBpbnQgbiwgazsKICAgIHN0ZDo6Y2luID4+IG4gPj4gazsKCiAgICBzdGQ6OnZlY3RvcjxpbnQ+IHJvY2tzKG4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBzdGQ6OmNpbiA+PiByb2Nrc1tpXTsKICAgIH0KCiAgICAvLyBSZXN1bHRhbnQgYXJyYXkgd2hpY2ggd2lsbCBjb250YWluIHRoZSByb2NrcyBpbiB0aGUgc21hbGxlc3QgbGV4aWNvZ3JhcGhpY2FsIG9yZGVyCiAgICBzdGQ6OnZlY3RvcjxpbnQ+IHJlc3VsdDsKCiAgICAvLyBXZSBuZWVkIHRvIHNvcnQgc2VnbWVudHMgd2hlcmUgdGhlIHdlaWdodCBkaWZmZXJlbmNlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBga2AKICAgIGludCBzdGFydCA9IDA7CgogICAgd2hpbGUgKHN0YXJ0IDwgbikgewogICAgICAgIGludCBlbmQgPSBzdGFydDsKCiAgICAgICAgLy8gRmluZCB0aGUgc2VnbWVudCB3aGljaCBjYW4gYmUgc29ydGVkIChiYXNlZCBvbiB0aGUgd2VpZ2h0IGRpZmZlcmVuY2UgY29uZGl0aW9uKQogICAgICAgIHdoaWxlIChlbmQgPCBuIC0gMSAmJiBzdGQ6OmFicyhyb2Nrc1tlbmQgKyAxXSAtIHJvY2tzW2VuZF0pIDw9IGspIHsKICAgICAgICAgICAgZW5kKys7CiAgICAgICAgfQoKICAgICAgICAvLyBDcmVhdGUgYSBzdWJ2ZWN0b3IgZm9yIHRoaXMgc2VnbWVudCBhbmQgc29ydCBpdAogICAgICAgIHN0ZDo6dmVjdG9yPGludD4gc2VnbWVudChyb2Nrcy5iZWdpbigpICsgc3RhcnQsIHJvY2tzLmJlZ2luKCkgKyBlbmQgKyAxKTsKICAgICAgICBzdGQ6OnNvcnQoc2VnbWVudC5iZWdpbigpLCBzZWdtZW50LmVuZCgpKTsKCiAgICAgICAgLy8gQXBwZW5kIHRoZSBzb3J0ZWQgc2VnbWVudCB0byB0aGUgcmVzdWx0CiAgICAgICAgcmVzdWx0Lmluc2VydChyZXN1bHQuZW5kKCksIHNlZ21lbnQuYmVnaW4oKSwgc2VnbWVudC5lbmQoKSk7CgogICAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgc2VnbWVudAogICAgICAgIHN0YXJ0ID0gZW5kICsgMTsKICAgIH0KCiAgICAvLyBPdXRwdXQgdGhlIHJlc3VsdCwgd2hpY2ggc2hvdWxkIGJlIHRoZSBzbWFsbGVzdCBsZXhpY29ncmFwaGljYWwgc2VxdWVuY2UKICAgIGZvciAoaW50IHZhbCA6IHJlc3VsdCkgewogICAgICAgIHN0ZDo6Y291dCA8PCB2YWwgPDwgIlxuIjsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=