import java.util.*;

public class Euler32 {
    private static class Options {
        boolean runCheckpoints = true;
    }

    private static boolean parseArguments(String[] args, Options options) {
        for (int i = 0; i < args.length; i++) {
            String arg = args[i];
            if (arg.equals("--skip-checkpoints")) {
                options.runCheckpoints = false;
                continue;
            }
            System.err.println("Unknown argument: " + arg);
            return false;
        }
        return true;
    }

    private static boolean is_1_to_9_pandigital_triplet(int a, int b, int product) {
        boolean[] used = new boolean[10];
        int digitsSeen = 0;

        digitsSeen = addDigits(a, used, digitsSeen);
        if (digitsSeen == -1) return false;
        digitsSeen = addDigits(b, used, digitsSeen);
        if (digitsSeen == -1) return false;
        digitsSeen = addDigits(product, used, digitsSeen);
        if (digitsSeen == -1) return false;

        if (digitsSeen != 9) {
            return false;
        }
        for (int d = 1; d <= 9; d++) {
            if (!used[d]) {
                return false;
            }
        }
        return true;
    }

    private static int addDigits(int value, boolean[] used, int digitsSeen) {
        int v = value;
        while (v > 0) {
            int d = v % 10;
            if (d == 0 || used[d]) {
                return -1;
            }
            used[d] = true;
            digitsSeen++;
            v /= 10;
        }
        return digitsSeen;
    }

    private static int solve() {
        Set<Integer> products = new HashSet<>();

        for (int a = 1; a <= 9; a++) {
            for (int b = 1234; b <= 9876; b++) {
                int p = a * b;
                if (is_1_to_9_pandigital_triplet(a, b, p)) {
                    products.add(p);
                }
            }
        }

        for (int a = 12; a <= 98; a++) {
            for (int b = 123; b <= 987; b++) {
                int p = a * b;
                if (is_1_to_9_pandigital_triplet(a, b, p)) {
                    products.add(p);
                }
            }
        }

        int total = 0;
        for (int p : products) {
            total += p;
        }
        return total;
    }

    private static boolean runCheckpoints() {
        if (!is_1_to_9_pandigital_triplet(39, 186, 7254)) {
            System.err.println("Checkpoint failed for example identity");
            return false;
        }
        if (is_1_to_9_pandigital_triplet(12, 34, 408)) {
            System.err.println("Checkpoint failed for non-pandigital identity");
            return false;
        }
        return true;
    }

    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());
    }
}
