public class Euler788 {
    static final long MOD = 1000000007L;

    static long modPow(long a, long e) {
        long r = 1;
        while (e > 0) {
            if ((e & 1) == 1) {
                r = (r * a) % MOD;
            }
            a = (a * a) % MOD;
            e >>= 1;
        }
        return r;
    }

    static long comb(int n, int k, long[] fact, long[] invFact) {
        if (k < 0 || k > n) {
            return 0;
        }
        long res = (fact[n] * invFact[k]) % MOD;
        return (res * invFact[n - k]) % MOD;
    }

    static long solveFast(int n) {
        long[] fact = new long[n + 1];
        long[] invFact = new long[n + 1];
        long[] pow9 = new long[n + 2];

        fact[0] = 1;
        invFact[0] = 1;
        pow9[0] = 1;

        for (int i = 1; i <= n; ++i) {
            fact[i] = (fact[i - 1] * i) % MOD;
        }

        invFact[n] = modPow(fact[n], MOD - 2);
        for (int i = n; i >= 1; --i) {
            invFact[i - 1] = (invFact[i] * i) % MOD;
        }

        for (int i = 1; i <= n + 1; ++i) {
            pow9[i] = (pow9[i - 1] * 9) % MOD;
        }

        long ans = 0;
        for (int len = 1; len <= n; ++len) {
            for (int k = len / 2 + 1; k <= len; ++k) {
                long c = comb(len, k, fact, invFact);
                long ways = (pow9[len - k + 1] * c) % MOD;
                ans = (ans + ways) % MOD;
            }
        }

        return ans;
    }

    public static String solve() {
        return Long.toString(solveFast(2022));
    }

    public static void main(String[] args) {
        System.out.println(solve());
    }
}
