#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define INF (1<<29) #define rep(i,n) for(int i=0;i<(int)(n);i++) #define all(v) v.begin(),v.end() #define uniq(v) v.erase(unique(all(v)),v.end()) #define indexOf(v,x) (find(all(v),x)-v.begin()) #if defined(_MSC_VER)||defined(__SSE4_2__) #include #endif inline int popcount64(unsigned long long x){ #if defined(_MSC_VER) //Cf return __popcnt(x>>32)+__popcnt(x); #elif defined(__GNUC__) return __builtin_popcountll(x); #else x = (x>>1 & 0x5555555555555555ULL)+(x & 0x5555555555555555ULL); x = (x>>2 & 0x3333333333333333ULL)+(x & 0x3333333333333333ULL); x = (x>>4 & 0x0f0f0f0f0f0f0f0fULL)+(x & 0x0f0f0f0f0f0f0f0fULL); x = (x>>8 & 0x00ff00ff00ff00ffULL)+(x & 0x00ff00ff00ff00ffULL); x = (x>>16& 0x0000ffff0000ffffULL)+(x & 0x0000ffff0000ffffULL); return ((x>>32)+(x & 0xffffffff)); #endif } long long pos[48]={ 17783766827 , 36597922058 , 55728829658 , 75271835395 , 94749519875 , 114724570219 , 135675733668 , 154888300991 , 174703885783 , 194982811608 , 215555696869 , 236309167965 , 257608691826 , 278800736335 , 298028104037 , 318086072310 , 338747180679 , 359091718042 , 380081084166 , 401389964696 , 422407558678 , 443212979522 , 464479050991 , 486175479780 , 507764539058 , 530019313303 , 552431041517 , 571588514724 , 591580681943 , 612174376769 , 632548841747 , 653606242405 , 674792114825 , 695982932450 , 716630677540 , 737892684385 , 759673274442 , 781163722659 , 803366994623 , 826195995327 , 846368250656 , 867481363526 , 889237003125 , 910710669981 , 932654264548 , 955327488252 , 977123986647 , 999145398059 , }; long long num[]={ 1073741824 ,2147483648 ,3221225472 ,4294967296 ,5368709120 ,6442450944 ,7516192768 ,8589934592 ,9663676416 ,10737418240 ,11811160064 ,12884901888 ,13958643712 ,15032385536 ,16106127360 ,17179869184 ,18253611008 ,19327352832 ,20401094656 ,21474836480 ,22548578304 ,23622320128 ,24696061952 ,25769803776 ,26843545600 ,27917287424 ,28991029248 ,30064771072 ,31138512896 ,32212254720 ,33285996544 ,34359738368 ,35433480192 ,36507222016 ,37580963840 ,38654705664 ,39728447488 ,40802189312 ,41875931136 ,42949672960 ,44023414784 ,45097156608 ,46170898432 ,47244640256 ,48318382080 ,49392123904 ,50465865728 ,51539607552 }; int main(){ /*long long n,s=0,p=1,c=1; n=1000000000000; ofstream ofs("out.txt"); while(p<=n){ if((c&((1<<30)-1))==0)ofs<>n; p=upper_bound(pos,pos+48,n); if(p==pos){ m=1; c=1; }else { p--; m=*p; c=num[p-pos]; } while(m