#include "Anna.h"
#include <iostream>
#include <vector>
#include <cassert>
#include <algorithm>
using namespace std;
using ll=long long;
namespace encode
{
const ll base[8]={1, 3, 8, 17, 35, 72, 146, 292};
const ll prod[8]={1, 2, 8, 72, 1296, 46656, 3405888, 500665536};
const ll sz[8]={1, 5, 18, 53, 141, 354, 854, 2000};
int Declare() { return 2000; }
pair<vector<int>, vector<int>> Anna(ll A)
{
assert(A<=1e11);
cerr<<A<<endl;
ll rep[8];
for (int i=7; i>=0; i--)
{
rep[i]=A/prod[i];
A%=prod[i];
}
for (int i=0; i<=7; i++) cerr<<rep[i]<<' '; cerr<<endl;
string X[8], Y[8];
for (int i=0; i<=7; i++)
{
assert(0<=rep[i] && rep[i]<=base[i]);
for (int j=1; j<=rep[i]; j++) X[i]+='1';
for (int j=rep[i]+1; j<=base[i]; j++) X[i]+='0';
Y[i]=X[i]; reverse(Y[i].begin(), Y[i].end());
//cerr<<i<<": "<<X[i]<<' '<<Y[i]<<endl;
}
string S, T;
for (int i=0; i<=7; i++)
{
S=S+X[i]+S;
T=T+Y[i]+T;
}
vector<int> svec, tvec;
for (int i=0; i<2000; i++) svec.push_back(int(S[i]-'0'));
for (int i=0; i<2000; i++) tvec.push_back(int(T[i]-'0'));
return {svec, tvec};
}
}
int Declare() { return encode::Declare(); }
pair<vector<int>, vector<int>> Anna(ll A) { return encode::Anna(A); }
#include "Bruno.h"
#include <iostream>
#include <vector>
#include <cassert>
#include <algorithm>
using namespace std;
using ll=long long;
namespace decode
{
const ll base[8]={1, 3, 8, 17, 35, 72, 146, 292};
const ll prod[8]={1, 2, 8, 72, 1296, 46656, 3405888, 500665536};
const ll sz[8]={1, 5, 18, 53, 141, 354, 854, 2000};
ll Bruno(vector<int> V)
{
for (int i=1; i<4000; i++) V[i]+=V[i-1];
ll rep[8];
for (int i=0; i<=7; i++) rep[i]=V[sz[i]-1];
for (int i=7; i>=1; i--) rep[i]-=rep[i-1]*2;
ll ans=0;
for (int i=0; i<=7; i++)
{
assert(0<=rep[i] && rep[i]<=base[i]);
ans+=rep[i]*prod[i];
//cerr<<i<<": "<<rep[i]<<endl;
}
//cerr<<ans<<endl;
return ans;
}
}
ll Bruno(vector<int> u) { return decode::Bruno(u); }