func_code_string: #include <bits/stdc++.h>   using namespace std;   void maximize(int &a, int b) { a = max(a, b); }   const long long int modulo = 1e9 + 7;   void add(int &a, long long int b) { a = (a + b) % modulo; }   int n;   int memcompute[20][2][1000005];   int expo3[2];   int compute(int x, int y, long long int available) {     int &mem = memcompute[x][y][available];     if (mem != -1) return mem;     mem = 0;     if (not x and not y and not available) {       mem = 1;       return mem;     }     if (x) {       long long int extra =           n / ((1 << (x - 1)) * expo3[y]) - n / ((1 << x) * expo3[y]);       add(mem, extra * compute(x - 1, y, available + extra - 1));     }     if (y) {       long long int extra =           n / ((1 << x) * expo3[y - 1]) - n / ((1 << x) * expo3[y]);       add(mem, extra * compute(x, y - 1, available + extra - 1));     }     if (available) add(mem, compute(x, y, available - 1) * available);     return mem;   }   int sol;   int main() {     cin >> n;     for (int i = 0; i < 20; i++)       for (int j = 0; j < 2; j++)         for (int k = 0; k <= n; k++) memcompute[i][j][k] = -1;     expo3[0] = 1;     expo3[1] = 3;     int e = 0;     while ((1 << (e + 1)) <= n) e++;     add(sol, compute(e, 0, 0));     if (e and (1 << (e - 1)) * 3 <= n) add(sol, compute(e - 1, 1, 0));     cout << sol << endl;   }   