#include using namespace std; typedef long long LL; const LL MOD = 1000000007; int main() { // 1. 入力情報取得. LL N; cin >> N; // 2. N を 1000000007 で割った余りは? // 2-1. N を 2で割っていく. map m; while(N){ LL q = N / 2; LL r = N % 2; m[q] = r; N /= 2; } // for(auto &p : m) cout << p.first << " " << p.second << endl; // 2-2. 2-1. の 結果から, 余りを逆算. LL ans = 1; LL bef = 0; LL counter = 0; for(auto &p : m){ if(p.first != 0) ans *= ans, ans %= MOD; if(p.second == 1) ans *= 10, ans %= MOD; } // ex. // 3, 30, 300, ..., 3 × {10 の (N - 1)乗}, 1 × (10 の N乗) の 合計は? // -> 等比級数の和: 3 × {(10 の N乗) - 1} / (10 - 1) = {(10 の N乗) - 1} / 3 // に, 1 × (10 の N乗) を加算すれば良いので, EN = {4 × (10 の N乗) - 1} / 3 と考えられる. // ans = (4 * ans - 1) / 3; // -> 1/3 = 333333336 と読み替える必要がありそう. ans *= 4; ans %= MOD; ans--; ans *= 333333336; ans %= MOD; // 3. 後処理. cout << ans << endl; return 0; }