Problem:
Score : 300 points

Problem Statement

How many integer sequences A_1,A_2,\ldots,A_N of length N satisfy all of the following conditions?

0 \leq A_i \leq 9

There exists some i such that A_i=0 holds.

There exists some i such that A_i=9 holds.

The answer can be very large, so output it modulo 10^9 + 7.

Constraints

1 \leq N \leq 10^6

N is an integer.

Input

Input is given from Standard Input in the following format:

N

Output

Print the answer modulo 10^9 + 7.

Sample Input 1

2

Sample Output 1

2

Two sequences \{0,9\} and \{9,0\} satisfy all conditions.

Sample Input 2

1

Sample Output 2

0

Sample Input 3

869121

Sample Output 3

2511445

Solution in C++ (GCC 9.2.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
using namespace std;

#define REP(i, begin, end) for (__typeof(end) i = (begin) - ((begin) > (end)); i != (end) - ((begin) > (end)); i += 1 - 2 * ((begin) > (end)))
#define ALL(c) c.begin(), c.end()
#define SZ(c) (int) c.size()
#define DBG1(x) cout<<#x<<" = "<<x<<"\n"
#if USE_CP_REDIR
#define CP \
    freopen("input.txt","r", stdin); \
    freopen("output.txt","w", stdout);
#endif

using ll = long long;
const ll MOD = 1'000'000'007;
const int MN = 1'000'000;

ll mod_add(ll a, ll b)
{
    return (((a % MOD) + (b % MOD)) % MOD);
}

ll mod_mul(ll a, ll b){
    return (((a % MOD) * (b % MOD)) % MOD);
}

/* Iterative Function to calculate (x^y)%p  
in O(log y) */
long long mod_exp(long long x, long long y) 
{ 
    long long res = 1; // Initialize result 
  
    x = x % MOD; // Update x if it is more than or 
    // equal to p 
  
    while (y > 0) { 
        // If y is odd, multiply x with result 
        if (y & 1) 
            res = (res * x) % MOD; 
  
        // y must be even now 
        y = y >> 1; // y = y/2 
        x = (x * x) % MOD; 
    } 
    return res; 
} 

ll A(ll n, ll k)
{
    ll res = 1LL;
    for(ll i = n; i > n - k; i--){
        res = mod_mul(res, i);
    }
    return res;
}

int main()
{
ios::sync_with_stdio(false);
#ifdef CP
    CP;
#endif
    int n;
    cin >> n;
    if(n == 1){
        cout << 0 << endl;
        return 0;
    }
    
    // Inclusion-Exclusion principle.
    ll all = mod_exp(10, n); 
    ll seq_without_9 = mod_exp(9, n);
    ll seq_without_0 = seq_without_9;
    ll seq_without_9_and_0 = mod_exp(8, n);
    cout << (all - seq_without_9 - seq_without_0 + seq_without_9_and_0 + MOD) % MOD << endl;
}