/* http://projecteuler.net/
 *
 * Problem 43
 * Find the sum of all pandigital numbers with an unusual sub-string
 * divisibility property.
 *
 * Solution by Melkor (Filip Niksic, fniksic@gmail.com)
 *
 **/

#include <iostream>
#include <bitset>

using namespace std;

bitset<10> digits;
long long d[10];
const long long primes[] = {2, 3, 5, 7, 11, 13, 17};
long long sum = 0;

void add_up() {
    long long num = 0;
    for (int i = 0; i < 10; ++i)
	num = num * 10 + d[i];
    sum += num;
    //cout << num << endl;
}

void check(int depth) {
    if (depth == 10) {
	long long sub = 10 * d[1] + d[2];
	for (int i = 0; i < 7; ++i) {
	    sub = (sub * 10 + d[3 + i]) % 1000;
	    if (sub % primes[i] != 0)
		return;
	}
	add_up();
	return;
    }

    // skip digit 3 and 5
    if (depth == 3 || depth == 5)
	++depth;

    // First digit cannot be 0, hence the lower limit.
    for (int i = (depth == 0); i < 10; ++i)
	if (!digits[i]) {
	    digits.set(i);
	    d[depth] = i;
	    check(depth + 1);
	    digits.reset(i);
	}
}

int main() {
    // Narrowing the search by using the fact that
    // d[3] must be even for d[1]d[2]d[3] to be divisible by 2
    // and d[5] must be 0 or 5 for d[3]d[4]d[5] to be divisible
    // by 5.
    for (int i = 0; i < 10; i += 2) {
	d[3] = i;
	digits.set(i);
	for (int j = (i == 0 ? 5 : 0); j < 10; j += 5) {
	    d[5] = j;
	    digits.set(j);
	    check(0);
	    digits.reset(j);
	}
	digits.reset(i);
    }

    cout << sum << endl;

    return 0;
}

