public class Euler412 {
    private static final int MOD = 76543217;

    private static int modPow(long base, long exp) {
        long result = 1;
        long cur = base % MOD;
        long e = exp;
        while (e > 0) {
            if ((e & 1L) != 0) {
                result = (result * cur) % MOD;
            }
            cur = (cur * cur) % MOD;
            e >>= 1L;
        }
        return (int) result;
    }

    public static String solve() {
        int m = 10000;
        int n = 5000;
        int p = m - n;
        long cells = 1L * m * m - 1L * n * n;

        int maxSmall = 2 * m - 1;
        int[] factSmall = new int[maxSmall + 1];
        factSmall[0] = 1;
        for (int i = 1; i <= maxSmall; ++i) {
            factSmall[i] = (int) (1L * factSmall[i - 1] * i % MOD);
        }

        int factCells = 1;
        for (long i = 1; i <= cells; ++i) {
            factCells = (int) (1L * factCells * (i % MOD) % MOD);
        }

        int paNum = 1;
        for (int t = m + n; t <= 2 * m - 1; ++t) {
            paNum = (int) (1L * paNum * factSmall[t] % MOD);
        }
        int paDen = 1;
        for (int s = 2 * n; s <= m + n - 1; ++s) {
            paDen = (int) (1L * paDen * factSmall[s] % MOD);
        }
        int pa = (int) (1L * paNum * modPow(paDen, MOD - 2) % MOD);

        int pbNum = 1;
        for (int t = n; t <= m - 1; ++t) {
            pbNum = (int) (1L * pbNum * factSmall[t] % MOD);
        }
        int pbDen = 1;
        for (int u = 0; u <= p - 1; ++u) {
            pbDen = (int) (1L * pbDen * factSmall[u] % MOD);
        }
        int pb = (int) (1L * pbNum * modPow(pbDen, MOD - 2) % MOD);

        int hooks = pa;
        hooks = (int) (1L * hooks * pb % MOD);
        hooks = (int) (1L * hooks * pb % MOD);

        long ans = 1L * factCells * modPow(hooks, MOD - 2) % MOD;
        return String.valueOf(ans);
    }

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