#include <bits/stdc++.h>
#include "souvenirs.h"
using namespace std;
void buy_souvenirs(int n, long long p0) {
if (n == 3) {
auto [v, rem] = transaction(p0 - 1);
if (v.size() == 2) {
long long sum = p0 - 1 - rem;
transaction(sum / 2);
} else {
long long p1 = p0 - 1 - rem;
transaction(p1 - 1);
transaction(p1 - 1);
}
return;
}
long long prv = p0;
auto [v, rem] = transaction(p0 - 1);
vector<int> cnt(n);
iota(cnt.begin(), cnt.end(), 0);
for (auto j : v) {
cnt[j]--;
}
if (v.size() == 2) {
prv -= 2;
for (int i = 2; i < n; i++ ){
auto [v, r] = transaction(prv - 1);
if (v.size() == 2) {
prv -= 2;
} else {
prv--;
}
for (auto j : v) {
cnt[j]--;
}
while (cnt[i]--) {
transaction(prv);
}
}
} else {
if (rem == 1) {
prv -= 2;
} else {
prv--;
}
for (int i = 2; i < n; i++) {
auto [v, r] = transaction(prv - 1);
if (r == 1) {
prv -= 2;
} else {
prv--;
}
for (auto j : v) {
cnt[j]--;
}
while (cnt[i]--) {
transaction(prv);
}
}
}
return;
}