#include "souvenirs.h"
#include <cassert>
#include <cstdio>
#include <cstdlib>
#include <utility>
#include <vector>
#include <utility>
#include <vector>
#include <iostream>
using namespace std;
vector<int>trans[105];
long long val[105];
long long number[105];
std::pair<std::vector<int>, long long> transaction(long long M);
long long suffix;
long long cnt[105];
void solve(long long valmax)
{
std::pair<std::vector<int>, long long>rez=transaction(valmax);
valmax-=rez.second;
int curr=rez.first[0];
for(auto it:rez.first)
{
trans[curr].push_back(it);
cnt[it]++;
}
while(trans[curr].back()>suffix)
{
valmax-=number[trans[curr].back()];
trans[curr].pop_back();
}
while(suffix>curr+1)
{
int cate=trans[curr].size();
long long nxtval=(valmax+cate-1)/cate-1;
solve(nxtval);
while(suffix<=trans[curr].back())
{
valmax-=number[trans[curr].back()];
trans[curr].pop_back();
}
}
number[curr]=valmax;
suffix--;
}
void buy_souvenirs(int N, long long P0)
{
int n=N;
suffix=n;
solve(P0-1);
for(int i=1;i<n;i++)
{
while(cnt[i]<i)
{
transaction(number[i]);
cnt[i]++;
}
//cout<<number[i]<<" ";
}
//cout<<'\n';
return;
}