public class Euler4 {
    static boolean isPalindrome(long value) {
        String s = Long.toString(value);
        int len = s.length();
        for (int i = 0; i < len / 2; i++) {
            if (s.charAt(i) != s.charAt(len - 1 - i))
                return false;
        }
        return true;
    }

    static long solve(int digits) {
        long low = 1;
        for (int i = 1; i < digits; i++)
            low *= 10;
        long high = low * 10 - 1;

        long best = 0;
        for (long a = high; a >= low; a--) {
            if (a * high < best)
                break;
            for (long b = a; b >= low; b--) {
                long prod = a * b;
                if (prod <= best)
                    break;
                if (isPalindrome(prod))
                    best = prod;
            }
        }
        return best;
    }

    public static void main(String[] args) {
        assert solve(2) == 9009 : "Checkpoint failed for digits=2";
        System.out.println(solve(3));
    }
}
