#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#include //#include //#include using namespace std; #define int ll typedef long long ll; typedef pair P; typedef pair > PP; typedef vector VI; typedef vector VL; //static const int MOD = 1000000007; static const int INF = 2147483647; //static const long long INF = 9223372000000000000; //static const long long INF = 9223372000000000000/2; //static const int INF = 1000010000; //int dx4[4] = {0,1,0,-1}, dy4[4] = {-1,0,1,0}; //int dx5[5] = {-1,0,0,0,1}, dy5[5] = {0,-1,0,1,0}; //int dx8[8] = {-1,0,1,1,1,0,-1,-1}, dy8[8] = {1,1,1,0,-1,-1,-1,0}; //int dx9[9] = {-1,0,1,1,1,0,-1,-1,0}, dy9[9] = {1,1,1,0,-1,-1,-1,0,0}; #define PB push_back #define MP make_pair #define MT make_tuple #define FI first #define SE second #define NP next_permutation #define PQ priority_queue #define UB upper_bound #define LB lower_bound #define SZ(a) int((a).size()) #define LEN(a) int((a).length()) #define SORT(c) sort((c).begin(),(c).end()) #define FOR(i,a,b) for(int i=(a);i<(b);i++) #define REP(i,x) for(int i=0;i<(int)(x);i++) #define REP1(i,x) for(int i=1;i<=(int)(x);i++) #define RREP(i,x) for(int i=((int)(x)-1);i>=0;i--) #define RREP1(i,x) for(int i=((int)(x));i>0;i--) #define ALL(x) (x).begin(),(x).end() struct edge {int /*from,*/to,cost;}; VI power; void init(){ int n = 1; while(n> n; assert(n<=10e9&&1<=n); int ans = 0; REP(i,SZ(power)) if(n<=power[i]){ans = i;n=power[i]-n;break;} while(n>0){ RREP(i,SZ(power)) if(n>=power[i]){ans++;n-=power[i];} } printf("%lld\n",ans); return 0; }