#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
struct Target {
int dist, id, l, r;
bool is_boundary;
// Kolejka priorytetowa w C++ zwraca największy element.
// Chcemy: 1. Max dist, 2. Min ID.
bool operator<(const Target& other) const {
if (dist != other.dist) return dist < other.dist;
return id > other.id;
}
};
// Funkcja sprawdzająca, na której pozycji w sekwencji znajdzie się tarcza b dla danego x1
int get_rank(int n, int x1, int b, int target_rank) {
if (x1 == b) return 1;
priority_queue<Target> pq;
// Początkowe cele to brzegi (jeśli x1 nie jest brzegiem)
if (x1 > 1) pq.push({x1 - 1, 1, 1, x1, true});
if (x1 < n) pq.push({n - x1, n, x1, n, true});
int current_rank = 1;
while (!pq.empty()) {
Target curr = pq.top();
pq.pop();
current_rank++;
if (curr.id == b) return current_rank;
if (current_rank > target_rank) return -1; // Optymalizacja: b będzie później
if (curr.is_boundary) {
// Jeśli trafiliśmy brzeg, tworzymy przedział zamknięty między nim a x1
int L = min(curr.id, curr.l == curr.id ? curr.r : curr.l);
int R = max(curr.id, curr.l == curr.id ? curr.r : curr.l);
if (R - L > 1) {
int d = (R - L) / 2;
pq.push({d, L + d, L, R, false});
}
} else {
// Podział przedziału zamkniętego [L, R] przez środek
int mid = curr.id;
// Lewa połowa [L, mid]
if (mid - curr.l > 1) {
int d = (mid - curr.l) / 2;
pq.push({d, curr.l + d, curr.l, mid, false});
}
// Prawa połowa [mid, R]
if (curr.r - mid > 1) {
int d = (curr.r - mid) / 2;
pq.push({d, mid + d, mid, curr.r, false});
}
}
}
return -1;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, a, b;
if (!(cin >> n >> a >> b)) return 0;
int found_x1 = -1;
// Szukamy najmniejszego x1, które spełnia warunek (leksykograficznie)
for (int x1 = 1; x1 <= n; ++x1) {
if (get_rank(n, x1, b, a) == a) {
found_x1 = x1;
break;
}
}
if (found_x1 == -1) {
cout << "NIE" << endl;
} else {
// Odtwarzanie pełnej sekwencji dla znalezionego x1
vector<int> res;
res.push_back(found_x1);
priority_queue<Target> pq;
if (found_x1 > 1) pq.push({found_x1 - 1, 1, 1, found_x1, true});
if (found_x1 < n) pq.push({n - found_x1, n, found_x1, n, true});
while (!pq.empty()) {
Target curr = pq.top();
pq.pop();
res.push_back(curr.id);
if (curr.is_boundary) {
int L = min(curr.id, curr.l == curr.id ? curr.r : curr.l);
int R = max(curr.id, curr.l == curr.id ? curr.r : curr.l);
if (R - L > 1) {
int d = (R - L) / 2;
pq.push({d, L + d, L, R, false});
}
} else {
int mid = curr.id;
if (mid - curr.l > 1) {
int d = (mid - curr.l) / 2;
pq.push({d, curr.l + d, curr.l, mid, false});
}
if (curr.r - mid > 1) {
int d = (curr.r - mid) / 2;
pq.push({d, mid + d, mid, curr.r, false});
}
}
}
for (int i = 0; i < n; ++i) {
cout << res[i] << (i == n - 1 ? "" : " ");
}
cout << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxhbGdvcml0aG0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFRhcmdldCB7CiAgICBpbnQgZGlzdCwgaWQsIGwsIHI7CiAgICBib29sIGlzX2JvdW5kYXJ5OwoKICAgIC8vIEtvbGVqa2EgcHJpb3J5dGV0b3dhIHcgQysrIHp3cmFjYSBuYWp3acSZa3N6eSBlbGVtZW50LgogICAgLy8gQ2hjZW15OiAxLiBNYXggZGlzdCwgMi4gTWluIElELgogICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVGFyZ2V0JiBvdGhlcikgY29uc3QgewogICAgICAgIGlmIChkaXN0ICE9IG90aGVyLmRpc3QpIHJldHVybiBkaXN0IDwgb3RoZXIuZGlzdDsKICAgICAgICByZXR1cm4gaWQgPiBvdGhlci5pZDsgCiAgICB9Cn07CgovLyBGdW5rY2phIHNwcmF3ZHphasSFY2EsIG5hIGt0w7NyZWogcG96eWNqaSB3IHNla3dlbmNqaSB6bmFqZHppZSBzacSZIHRhcmN6YSBiIGRsYSBkYW5lZ28geDEKaW50IGdldF9yYW5rKGludCBuLCBpbnQgeDEsIGludCBiLCBpbnQgdGFyZ2V0X3JhbmspIHsKICAgIGlmICh4MSA9PSBiKSByZXR1cm4gMTsKICAgIAogICAgcHJpb3JpdHlfcXVldWU8VGFyZ2V0PiBwcTsKICAgIC8vIFBvY3rEhXRrb3dlIGNlbGUgdG8gYnJ6ZWdpIChqZcWbbGkgeDEgbmllIGplc3QgYnJ6ZWdpZW0pCiAgICBpZiAoeDEgPiAxKSBwcS5wdXNoKHt4MSAtIDEsIDEsIDEsIHgxLCB0cnVlfSk7CiAgICBpZiAoeDEgPCBuKSBwcS5wdXNoKHtuIC0geDEsIG4sIHgxLCBuLCB0cnVlfSk7CgogICAgaW50IGN1cnJlbnRfcmFuayA9IDE7CiAgICB3aGlsZSAoIXBxLmVtcHR5KCkpIHsKICAgICAgICBUYXJnZXQgY3VyciA9IHBxLnRvcCgpOwogICAgICAgIHBxLnBvcCgpOwogICAgICAgIAogICAgICAgIGN1cnJlbnRfcmFuaysrOwogICAgICAgIGlmIChjdXJyLmlkID09IGIpIHJldHVybiBjdXJyZW50X3Jhbms7CiAgICAgICAgaWYgKGN1cnJlbnRfcmFuayA+IHRhcmdldF9yYW5rKSByZXR1cm4gLTE7IC8vIE9wdHltYWxpemFjamE6IGIgYsSZZHppZSBww7PFum5pZWoKCiAgICAgICAgaWYgKGN1cnIuaXNfYm91bmRhcnkpIHsKICAgICAgICAgICAgLy8gSmXFm2xpIHRyYWZpbGnFm215IGJyemVnLCB0d29yenlteSBwcnplZHppYcWCIHphbWtuacSZdHkgbWnEmWR6eSBuaW0gYSB4MQogICAgICAgICAgICBpbnQgTCA9IG1pbihjdXJyLmlkLCBjdXJyLmwgPT0gY3Vyci5pZCA/IGN1cnIuciA6IGN1cnIubCk7CiAgICAgICAgICAgIGludCBSID0gbWF4KGN1cnIuaWQsIGN1cnIubCA9PSBjdXJyLmlkID8gY3Vyci5yIDogY3Vyci5sKTsKICAgICAgICAgICAgaWYgKFIgLSBMID4gMSkgewogICAgICAgICAgICAgICAgaW50IGQgPSAoUiAtIEwpIC8gMjsKICAgICAgICAgICAgICAgIHBxLnB1c2goe2QsIEwgKyBkLCBMLCBSLCBmYWxzZX0pOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gUG9kemlhxYIgcHJ6ZWR6aWHFgnUgemFta25pxJl0ZWdvIFtMLCBSXSBwcnpleiDFm3JvZGVrCiAgICAgICAgICAgIGludCBtaWQgPSBjdXJyLmlkOwogICAgICAgICAgICAvLyBMZXdhIHBvxYJvd2EgW0wsIG1pZF0KICAgICAgICAgICAgaWYgKG1pZCAtIGN1cnIubCA+IDEpIHsKICAgICAgICAgICAgICAgIGludCBkID0gKG1pZCAtIGN1cnIubCkgLyAyOwogICAgICAgICAgICAgICAgcHEucHVzaCh7ZCwgY3Vyci5sICsgZCwgY3Vyci5sLCBtaWQsIGZhbHNlfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gUHJhd2EgcG/Fgm93YSBbbWlkLCBSXQogICAgICAgICAgICBpZiAoY3Vyci5yIC0gbWlkID4gMSkgewogICAgICAgICAgICAgICAgaW50IGQgPSAoY3Vyci5yIC0gbWlkKSAvIDI7CiAgICAgICAgICAgICAgICBwcS5wdXNoKHtkLCBtaWQgKyBkLCBtaWQsIGN1cnIuciwgZmFsc2V9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAtMTsKfQoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CgogICAgaW50IG4sIGEsIGI7CiAgICBpZiAoIShjaW4gPj4gbiA+PiBhID4+IGIpKSByZXR1cm4gMDsKCiAgICBpbnQgZm91bmRfeDEgPSAtMTsKICAgIC8vIFN6dWthbXkgbmFqbW5pZWpzemVnbyB4MSwga3TDs3JlIHNwZcWCbmlhIHdhcnVuZWsgKGxla3N5a29ncmFmaWN6bmllKQogICAgZm9yIChpbnQgeDEgPSAxOyB4MSA8PSBuOyArK3gxKSB7CiAgICAgICAgaWYgKGdldF9yYW5rKG4sIHgxLCBiLCBhKSA9PSBhKSB7CiAgICAgICAgICAgIGZvdW5kX3gxID0geDE7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoZm91bmRfeDEgPT0gLTEpIHsKICAgICAgICBjb3V0IDw8ICJOSUUiIDw8IGVuZGw7CiAgICB9IGVsc2UgewogICAgICAgIC8vIE9kdHdhcnphbmllIHBlxYJuZWogc2Vrd2VuY2ppIGRsYSB6bmFsZXppb25lZ28geDEKICAgICAgICB2ZWN0b3I8aW50PiByZXM7CiAgICAgICAgcmVzLnB1c2hfYmFjayhmb3VuZF94MSk7CiAgICAgICAgcHJpb3JpdHlfcXVldWU8VGFyZ2V0PiBwcTsKCiAgICAgICAgaWYgKGZvdW5kX3gxID4gMSkgcHEucHVzaCh7Zm91bmRfeDEgLSAxLCAxLCAxLCBmb3VuZF94MSwgdHJ1ZX0pOwogICAgICAgIGlmIChmb3VuZF94MSA8IG4pIHBxLnB1c2goe24gLSBmb3VuZF94MSwgbiwgZm91bmRfeDEsIG4sIHRydWV9KTsKCiAgICAgICAgd2hpbGUgKCFwcS5lbXB0eSgpKSB7CiAgICAgICAgICAgIFRhcmdldCBjdXJyID0gcHEudG9wKCk7CiAgICAgICAgICAgIHBxLnBvcCgpOwogICAgICAgICAgICByZXMucHVzaF9iYWNrKGN1cnIuaWQpOwoKICAgICAgICAgICAgaWYgKGN1cnIuaXNfYm91bmRhcnkpIHsKICAgICAgICAgICAgICAgIGludCBMID0gbWluKGN1cnIuaWQsIGN1cnIubCA9PSBjdXJyLmlkID8gY3Vyci5yIDogY3Vyci5sKTsKICAgICAgICAgICAgICAgIGludCBSID0gbWF4KGN1cnIuaWQsIGN1cnIubCA9PSBjdXJyLmlkID8gY3Vyci5yIDogY3Vyci5sKTsKICAgICAgICAgICAgICAgIGlmIChSIC0gTCA+IDEpIHsKICAgICAgICAgICAgICAgICAgICBpbnQgZCA9IChSIC0gTCkgLyAyOwogICAgICAgICAgICAgICAgICAgIHBxLnB1c2goe2QsIEwgKyBkLCBMLCBSLCBmYWxzZX0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaW50IG1pZCA9IGN1cnIuaWQ7CiAgICAgICAgICAgICAgICBpZiAobWlkIC0gY3Vyci5sID4gMSkgewogICAgICAgICAgICAgICAgICAgIGludCBkID0gKG1pZCAtIGN1cnIubCkgLyAyOwogICAgICAgICAgICAgICAgICAgIHBxLnB1c2goe2QsIGN1cnIubCArIGQsIGN1cnIubCwgbWlkLCBmYWxzZX0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGN1cnIuciAtIG1pZCA+IDEpIHsKICAgICAgICAgICAgICAgICAgICBpbnQgZCA9IChjdXJyLnIgLSBtaWQpIC8gMjsKICAgICAgICAgICAgICAgICAgICBwcS5wdXNoKHtkLCBtaWQgKyBkLCBtaWQsIGN1cnIuciwgZmFsc2V9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgICAgY291dCA8PCByZXNbaV0gPDwgKGkgPT0gbiAtIDEgPyAiIiA6ICIgIik7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgZW5kbDsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==