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# (.NET Core 3.1.201) (judge verdict: Accepted)

using System;
using System.Collections;
using System.Collections.Generic;

using System.Linq;
public class abc178_c {

    static DateTime START_TIME;
    public static void Main() {
        START_TIME = DateTime.Now;
#if MYTEST
        while (true) {
            System.Console.Error.WriteLine("TEST MODE>");
            START_TIME = DateTime.Now;
            System.Console.WriteLine(Answer());  // debug
            System.Console.WriteLine($"{(DateTime.Now - START_TIME).Seconds} sec.");
        }
#else
        System.Console.WriteLine(Answer());
#endif
    }
    public static void debugOut(string str) {
#if MYTEST
        System.Console.Error.Write(str);
#endif
    }
    public static long ModPow(long x, long n, long mod) {
        long result = x % mod;
        for (long i = 1; i < n; i++) {
            result = (result * x) % mod;
        }
        return result;
    }
    public static long ModSub(long x, long n, long mod) {
        while (x < n) {
            x += mod;
        }
        return (x - n) % mod;
    }
    public static string Answer() {
        var p = System.Console.ReadLine().Trim().Split(' ');
        var N = long.Parse(p[0]);
        var mod = (long)Math.Pow(10, 9) + 7;
        debugOut(mod.ToString() + "\n");

        var ans = ModPow(10, N, mod);
        ans = ModSub(ans, (ModPow(9, N, mod) * 2), mod);
        ans += ModPow(8, N, mod);
        while (ans >= mod) {
            ans %= mod;
        }
        return ans.ToString();
    }
}