#include "souvenirs.h"
#include <iostream>
#include <utility>
#include <vector>
#define ll long long
ll ng;
std::pair<std::vector<int>,long long> res;
std::vector<int> total;
void wrap(ll ts){
//std::cout << ts << ' ';
res = transaction(ts);
for(int i=0;i<res.first.size();i++){
total[res.first[i]]+=1;
}
}
bool checktoocoolforaname(){
return (res.first.size()>1);
}
bool reallystupidcheck(){
return (res.first.size()>1||res.second>0);
}
bool anotherreallystupidcheck(){
for(int i=0;i<ng;i++){
if(total[i]!=i)return false;
}
return true;
}
void buy_souvenirs(int N, long long P0) {
ng=N;
total.resize(N+4);
ll last= P0-1;
ll num=1;
if(N==3){
wrap(last);
ll value = res.second;
if(checktoocoolforaname()){
wrap((last-value)/2);
}
else{
wrap(last-value-1);
wrap(last-value-1);
}
}
while(!anotherreallystupidcheck()){
wrap(last);
bool res = reallystupidcheck();
if(res)last-=1;
last=std::max(last,(ll)1);
if(num==N-1){
while(!anotherreallystupidcheck()){
wrap(last);
}
}
else for(int i=1;i<num;i++)wrap(last);
num+=1;
last-=1;
last=std::max(last,(ll)1);
}
return;
}