class Euler41 {
    public static void main(String[] args) {
        Options options = new Options();
        if (!parseArguments(args, options)) {
            System.exit(1);
        }
        if (options.runCheckpoints && !runCheckpoints()) {
            System.exit(2);
        }

        System.out.println(solve());
    }

    static class Options {
        boolean runCheckpoints = true;
    }

    static boolean parseArguments(String[] args, Options options) {
        for (int i = 0; i < args.length; ++i) {
            String arg = args[i];
            if ("--skip-checkpoints".equals(arg)) {
                options.runCheckpoints = false;
                continue;
            }

            System.err.println("Unknown argument: " + arg);
            return false;
        }
        return true;
    }

    static boolean isPrime(long n) {
        if (n < 2) {
            return false;
        }
        if ((n % 2) == 0) {
            return n == 2;
        }
        for (long p = 3; p <= n / p; p += 2) {
            if ((n % p) == 0) {
                return false;
            }
        }
        return true;
    }

    static long solve() {
        for (int n = 9; n >= 1; --n) {
            int digitSum = n * (n + 1) / 2;
            if (digitSum % 3 == 0) {
                continue;
            }

            StringBuilder digits = new StringBuilder();
            for (int d = n; d >= 1; --d) {
                digits.append((char)('0' + d));
            }

            String perm = digits.toString();
            do {
                long value = Long.parseLong(perm);
                if (isPrime(value)) {
                    return value;
                }
                perm = prevPermutation(perm);
            } while (perm != null);
        }

        return 0;
    }

    static String prevPermutation(String str) {
        char[] array = str.toCharArray();
        int n = array.length;

        int i = n - 2;
        while (i >= 0 && array[i] <= array[i + 1]) {
            i--;
        }

        if (i == -1) {
            return null;
        }

        int j = n - 1;
        while (array[j] >= array[i]) {
            j--;
        }

        swap(array, i, j);

        reverse(array, i + 1, n - 1);

        return new String(array);
    }

    static void swap(char[] array, int i, int j) {
        char temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }

    static void reverse(char[] array, int start, int end) {
        while (start < end) {
            swap(array, start, end);
            start++;
            end--;
        }
    }

    static boolean runCheckpoints() {
        if (!isPrime(2143)) {
            System.err.println("Checkpoint failed for prime 2143");
            return false;
        }
        if (isPrime(2145)) {
            System.err.println("Checkpoint failed for composite 2145");
            return false;
        }
        return true;
    }
}
