错了后面四个quq(没错套模板也会错的蒟蒻是我)
#include<bits/stdc++.h>
#define ll long long
#define M 10000007
using namespace std;
ll N,dig[60],dp[60][150], ans=1;
ll dfs(int pos,int tot1,int tot0,bool qd0,bool limit){
// cout<<"pos:"<<pos<<" tot0:"<<tot0<<" tot1:"<<tot1<<" qd0:"<<qd0<<" limit:"<<limit<<endl;
if(!pos){
return max(tot1,1)%M;
}
if(!qd0 &&!limit &&dp[pos][tot1]){
return dp[pos][tot1];
}
int sum=1,up=limit?dig[pos]:1;
for(int i=0;i<=up;i++){
sum=sum*dfs(pos-1,i?tot1+1:tot1,tot0,qd0 &&!i,limit &&i==up)%M;
}
// cout<<"sum:"<<sum<<endl;
if(!qd0 &&!limit) dp[pos][tot1]=sum;
return sum;
}
ll solve(int n){
int i=0;
memset(dig,0,sizeof(dig));
memset(dp,0,sizeof(dp));
while(n){
dig[++i]=n%2;
n/=2;
}
return dfs(i,0,0,true,true);
}
int main(){
scanf("%lld",&N);
printf("%lld",solve(N));
}