# coding:UTF-8

import sys



def pow_r(x, n):

    if n == 0:

        return 1

    if n % 2 == 0:

        return pow_r(x ** 2, n //2)

    else:

        return x * pow_r(x ** 2, (n - 1) // 2)



if __name__ == '__main__':

    # ------ 入力 ------#

    # 1行入力

    n = int(eval(input()))    # 数字

    # a = input()     # 文字列

    # a = list(map(int, input().split()))     # スペース区切り連続数字

    # a = input().split()     # スペース区切り連続文字列

    # a = [int(c) for c in input()]   # 数字→単数字リスト変換



    # 定数行入力

    # x = 5

    # a = [int(input()) for _ in range(x)] # 数字

    # a = [input() for _ in range(x)] # 文字

    # a = [list(map(int, input().split())) for _ in range(x)]     # スペース区切り連続数字(行列)

    # a = [input().split() for _ in range(x)]     # スペース区切り連続文字

    # a = [[int(c) for c in input()] for _ in range(x)]  # 数字→単数字リスト変換(行列)



    # スペース区切り連続 数字、文字列複合

    # a = []

    # for _ in range(x):

    #     aa, bb = input().split()

    #     a.append((int(aa), bb))



    # ------ 処理 ------#

    S = pow_r(10, n)



    M = pow_r(9, n)

    M2 = pow_r(8, n)



    out = (S - (M + M - M2)) % (1000000000 + 7)



    # ------ 出力 ------#

    print(("{}".format(out)))

# coding:UTF-8

import sys



def pow_r(x, n):

    if n == 0:

        return 1

    if n % 2 == 0:

        return pow_r(x ** 2, n //2)

    else:

        return x * pow_r(x ** 2, (n - 1) // 2)



if __name__ == '__main__':

    # ------ 入力 ------#

    # 1行入力

    n = int(eval(input()))    # 数字

    # a = input()     # 文字列

    # a = list(map(int, input().split()))     # スペース区切り連続数字

    # a = input().split()     # スペース区切り連続文字列

    # a = [int(c) for c in input()]   # 数字→単数字リスト変換



    # 定数行入力

    # x = 5

    # a = [int(input()) for _ in range(x)] # 数字

    # a = [input() for _ in range(x)] # 文字

    # a = [list(map(int, input().split())) for _ in range(x)]     # スペース区切り連続数字(行列)

    # a = [input().split() for _ in range(x)]     # スペース区切り連続文字

    # a = [[int(c) for c in input()] for _ in range(x)]  # 数字→単数字リスト変換(行列)



    # スペース区切り連続 数字、文字列複合

    # a = []

    # for _ in range(x):

    #     aa, bb = input().split()

    #     a.append((int(aa), bb))



    # ------ 処理 ------#

    S = pow(10, n)



    M = pow(9, n)

    M2 = pow(8, n)



    out = (S - (M + M - M2)) % (1000000000 + 7)



    # ------ 出力 ------#

    print(("{}".format(out)))

# coding:UTF-8
import sys


def pow_r(x, n):
    if n == 0:
        return 1
    if n % 2 == 0:
        return pow_r(x**2, n // 2)
    else:
        return x * pow_r(x**2, (n - 1) // 2)


if __name__ == "__main__":
    # ------ 入力 ------#
    # 1行入力
    n = int(eval(input()))  # 数字
    # a = input()     # 文字列
    # a = list(map(int, input().split()))     # スペース区切り連続数字
    # a = input().split()     # スペース区切り連続文字列
    # a = [int(c) for c in input()]   # 数字→単数字リスト変換
    # 定数行入力
    # x = 5
    # a = [int(input()) for _ in range(x)] # 数字
    # a = [input() for _ in range(x)] # 文字
    # a = [list(map(int, input().split())) for _ in range(x)]     # スペース区切り連続数字(行列)
    # a = [input().split() for _ in range(x)]     # スペース区切り連続文字
    # a = [[int(c) for c in input()] for _ in range(x)]  # 数字→単数字リスト変換(行列)
    # スペース区切り連続 数字、文字列複合
    # a = []
    # for _ in range(x):
    #     aa, bb = input().split()
    #     a.append((int(aa), bb))
    # ------ 処理 ------#
    S = pow_r(10, n)
    M = pow_r(9, n)
    M2 = pow_r(8, n)
    out = (S - (M + M - M2)) % (1000000000 + 7)
    # ------ 出力 ------#
    print(("{}".format(out)))

# coding:UTF-8
import sys


def pow_r(x, n):
    if n == 0:
        return 1
    if n % 2 == 0:
        return pow_r(x**2, n // 2)
    else:
        return x * pow_r(x**2, (n - 1) // 2)


if __name__ == "__main__":
    # ------ 入力 ------#
    # 1行入力
    n = int(eval(input()))  # 数字
    # a = input()     # 文字列
    # a = list(map(int, input().split()))     # スペース区切り連続数字
    # a = input().split()     # スペース区切り連続文字列
    # a = [int(c) for c in input()]   # 数字→単数字リスト変換
    # 定数行入力
    # x = 5
    # a = [int(input()) for _ in range(x)] # 数字
    # a = [input() for _ in range(x)] # 文字
    # a = [list(map(int, input().split())) for _ in range(x)]     # スペース区切り連続数字(行列)
    # a = [input().split() for _ in range(x)]     # スペース区切り連続文字
    # a = [[int(c) for c in input()] for _ in range(x)]  # 数字→単数字リスト変換(行列)
    # スペース区切り連続 数字、文字列複合
    # a = []
    # for _ in range(x):
    #     aa, bb = input().split()
    #     a.append((int(aa), bb))
    # ------ 処理 ------#
    S = pow(10, n)
    M = pow(9, n)
    M2 = pow(8, n)
    out = (S - (M + M - M2)) % (1000000000 + 7)
    # ------ 出力 ------#
    print(("{}".format(out)))

-    S = pow_r(10, n) -    M = pow_r(9, n) -    M2 = pow_r(8, n) +    S = pow(10, n) +    M = pow(9, n) +    M2 = pow(8, n)