#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
struct Interval {
int l, r;
int dist;
int mid;
bool operator<(const Interval& other) const {
if (dist != other.dist) return dist > other.dist;
return mid < other.mid;
}
};
int N, A, B;
vector<int> simulate(int start) {
vector<int> res;
vector<bool> hit(N + 2, false);
hit[0] = hit[N + 1] = true;
res.push_back(start);
hit[start] = true;
set<Interval> q;
if (start > 1) q.insert({1, start - 1, (start - 1) / 2, (1 + start - 1) / 2});
if (start < N) q.insert({start + 1, N, (N - (start + 1)) / 2, (start + 1 + N) / 2});
while (!q.empty()) {
Interval best_int = *q.begin();
int cand_pq = best_int.mid;
int dist_pq = best_int.dist;
int cand_1 = -1, dist_1 = -1;
if (!hit[1]) {
int r = 1;
while (r <= N && !hit[r]) r++;
cand_1 = 1;
dist_1 = r - 2;
}
int cand_N = -1, dist_N = -1;
if (!hit[N]) {
int l = N;
while (l >= 1 && !hit[l]) l--;
cand_N = N;
dist_N = N - l - 1;
}
int max_d = max({dist_pq, dist_1, dist_N});
int best_pos = 1e9;
if (dist_1 == max_d) best_pos = min(best_pos, cand_1);
if (dist_N == max_d) best_pos = min(best_pos, cand_N);
if (dist_pq == max_d) best_pos = min(best_pos, cand_pq);
res.push_back(best_pos);
hit[best_pos] = true;
if (best_pos == cand_pq) {
q.erase(q.begin());
if (best_pos > best_int.l)
q.insert({best_int.l, best_pos - 1, (best_pos - 1 - best_int.l) / 2, (best_int.l + best_pos - 1) / 2});
if (best_pos < best_int.r)
q.insert({best_pos + 1, best_int.r, (best_int.r - (best_pos + 1)) / 2, (best_pos + 1 + best_int.r) / 2});
} else {
set<Interval> next_q;
for (auto it : q) {
if (best_pos >= it.l && best_pos <= it.r) {
if (best_pos > it.l)
next_q.insert({it.l, best_pos - 1, (best_pos - 1 - it.l) / 2, (it.l + best_pos - 1) / 2});
if (best_pos < it.r)
next_q.insert({best_pos + 1, it.r, (it.r - (best_pos + 1)) / 2, (best_pos + 1 + it.r) / 2});
} else {
next_q.insert(it);
}
}
q = next_q;
}
}
return res;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
if (!(cin >> N >> A >> B)) return 0;
for (int s = 1; s <= N; ++s) {
vector<int> path = simulate(s);
if (path.size() >= (size_t)A && path[A - 1] == B) {
for (int i = 0; i < N; ++i) {
cout << path[i] << (i == N - 1 ? "" : " ");
}
cout << endl;
return 0;
}
}
cout << -1 << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8c2V0PgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBJbnRlcnZhbCB7CiAgICBpbnQgbCwgcjsKICAgIGludCBkaXN0OwogICAgaW50IG1pZDsKCiAgICBib29sIG9wZXJhdG9yPChjb25zdCBJbnRlcnZhbCYgb3RoZXIpIGNvbnN0IHsKICAgICAgICBpZiAoZGlzdCAhPSBvdGhlci5kaXN0KSByZXR1cm4gZGlzdCA+IG90aGVyLmRpc3Q7CiAgICAgICAgcmV0dXJuIG1pZCA8IG90aGVyLm1pZDsKICAgIH0KfTsKCmludCBOLCBBLCBCOwoKdmVjdG9yPGludD4gc2ltdWxhdGUoaW50IHN0YXJ0KSB7CiAgICB2ZWN0b3I8aW50PiByZXM7CiAgICB2ZWN0b3I8Ym9vbD4gaGl0KE4gKyAyLCBmYWxzZSk7CiAgICBoaXRbMF0gPSBoaXRbTiArIDFdID0gdHJ1ZTsKCiAgICByZXMucHVzaF9iYWNrKHN0YXJ0KTsKICAgIGhpdFtzdGFydF0gPSB0cnVlOwoKICAgIHNldDxJbnRlcnZhbD4gcTsKICAgIGlmIChzdGFydCA+IDEpIHEuaW5zZXJ0KHsxLCBzdGFydCAtIDEsIChzdGFydCAtIDEpIC8gMiwgKDEgKyBzdGFydCAtIDEpIC8gMn0pOwogICAgaWYgKHN0YXJ0IDwgTikgcS5pbnNlcnQoe3N0YXJ0ICsgMSwgTiwgKE4gLSAoc3RhcnQgKyAxKSkgLyAyLCAoc3RhcnQgKyAxICsgTikgLyAyfSk7CgogICAgd2hpbGUgKCFxLmVtcHR5KCkpIHsKICAgICAgICBJbnRlcnZhbCBiZXN0X2ludCA9ICpxLmJlZ2luKCk7CiAgICAgICAgaW50IGNhbmRfcHEgPSBiZXN0X2ludC5taWQ7CiAgICAgICAgaW50IGRpc3RfcHEgPSBiZXN0X2ludC5kaXN0OwoKICAgICAgICBpbnQgY2FuZF8xID0gLTEsIGRpc3RfMSA9IC0xOwogICAgICAgIGlmICghaGl0WzFdKSB7CiAgICAgICAgICAgIGludCByID0gMTsKICAgICAgICAgICAgd2hpbGUgKHIgPD0gTiAmJiAhaGl0W3JdKSByKys7CiAgICAgICAgICAgIGNhbmRfMSA9IDE7CiAgICAgICAgICAgIGRpc3RfMSA9IHIgLSAyOwogICAgICAgIH0KCiAgICAgICAgaW50IGNhbmRfTiA9IC0xLCBkaXN0X04gPSAtMTsKICAgICAgICBpZiAoIWhpdFtOXSkgewogICAgICAgICAgICBpbnQgbCA9IE47CiAgICAgICAgICAgIHdoaWxlIChsID49IDEgJiYgIWhpdFtsXSkgbC0tOwogICAgICAgICAgICBjYW5kX04gPSBOOwogICAgICAgICAgICBkaXN0X04gPSBOIC0gbCAtIDE7CiAgICAgICAgfQoKICAgICAgICBpbnQgbWF4X2QgPSBtYXgoe2Rpc3RfcHEsIGRpc3RfMSwgZGlzdF9OfSk7CiAgICAgICAgaW50IGJlc3RfcG9zID0gMWU5OwoKICAgICAgICBpZiAoZGlzdF8xID09IG1heF9kKSBiZXN0X3BvcyA9IG1pbihiZXN0X3BvcywgY2FuZF8xKTsKICAgICAgICBpZiAoZGlzdF9OID09IG1heF9kKSBiZXN0X3BvcyA9IG1pbihiZXN0X3BvcywgY2FuZF9OKTsKICAgICAgICBpZiAoZGlzdF9wcSA9PSBtYXhfZCkgYmVzdF9wb3MgPSBtaW4oYmVzdF9wb3MsIGNhbmRfcHEpOwoKICAgICAgICByZXMucHVzaF9iYWNrKGJlc3RfcG9zKTsKICAgICAgICBoaXRbYmVzdF9wb3NdID0gdHJ1ZTsKCiAgICAgICAgaWYgKGJlc3RfcG9zID09IGNhbmRfcHEpIHsKICAgICAgICAgICAgcS5lcmFzZShxLmJlZ2luKCkpOwogICAgICAgICAgICBpZiAoYmVzdF9wb3MgPiBiZXN0X2ludC5sKSAKICAgICAgICAgICAgICAgIHEuaW5zZXJ0KHtiZXN0X2ludC5sLCBiZXN0X3BvcyAtIDEsIChiZXN0X3BvcyAtIDEgLSBiZXN0X2ludC5sKSAvIDIsIChiZXN0X2ludC5sICsgYmVzdF9wb3MgLSAxKSAvIDJ9KTsKICAgICAgICAgICAgaWYgKGJlc3RfcG9zIDwgYmVzdF9pbnQucikgCiAgICAgICAgICAgICAgICBxLmluc2VydCh7YmVzdF9wb3MgKyAxLCBiZXN0X2ludC5yLCAoYmVzdF9pbnQuciAtIChiZXN0X3BvcyArIDEpKSAvIDIsIChiZXN0X3BvcyArIDEgKyBiZXN0X2ludC5yKSAvIDJ9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZXQ8SW50ZXJ2YWw+IG5leHRfcTsKICAgICAgICAgICAgZm9yIChhdXRvIGl0IDogcSkgewogICAgICAgICAgICAgICAgaWYgKGJlc3RfcG9zID49IGl0LmwgJiYgYmVzdF9wb3MgPD0gaXQucikgewogICAgICAgICAgICAgICAgICAgIGlmIChiZXN0X3BvcyA+IGl0LmwpIAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3EuaW5zZXJ0KHtpdC5sLCBiZXN0X3BvcyAtIDEsIChiZXN0X3BvcyAtIDEgLSBpdC5sKSAvIDIsIChpdC5sICsgYmVzdF9wb3MgLSAxKSAvIDJ9KTsKICAgICAgICAgICAgICAgICAgICBpZiAoYmVzdF9wb3MgPCBpdC5yKSAKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9xLmluc2VydCh7YmVzdF9wb3MgKyAxLCBpdC5yLCAoaXQuciAtIChiZXN0X3BvcyArIDEpKSAvIDIsIChiZXN0X3BvcyArIDEgKyBpdC5yKSAvIDJ9KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dF9xLmluc2VydChpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcSA9IG5leHRfcTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlczsKfQoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CgogICAgaWYgKCEoY2luID4+IE4gPj4gQSA+PiBCKSkgcmV0dXJuIDA7CgogICAgZm9yIChpbnQgcyA9IDE7IHMgPD0gTjsgKytzKSB7CiAgICAgICAgdmVjdG9yPGludD4gcGF0aCA9IHNpbXVsYXRlKHMpOwogICAgICAgIGlmIChwYXRoLnNpemUoKSA+PSAoc2l6ZV90KUEgJiYgcGF0aFtBIC0gMV0gPT0gQikgewogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47ICsraSkgewogICAgICAgICAgICAgICAgY291dCA8PCBwYXRoW2ldIDw8IChpID09IE4gLSAxID8gIiIgOiAiICIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvdXQgPDwgZW5kbDsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgfQoKICAgIGNvdXQgPDwgLTEgPDwgZW5kbDsKICAgIHJldHVybiAwOwp9