public class Euler145 {
    static int[] outer = new int[19], inner = new int[19];
    static long total;

    public static void main(String[] args) {
        for (int a = 1; a <= 9; a++)
            for (int b = 1; b <= 9; b++)
                outer[a + b]++;
        for (int a = 0; a <= 9; a++)
            for (int b = 0; b <= 9; b++)
                inner[a + b]++;
        long ans = 0;
        for (int len = 2; len <= 9; len++) {
            total = 0;
            dfs(len, 0, 1, new int[len / 2]);
            ans += total;
        }
        System.out.println(ans);
    }

    static void dfs(int len, int idx, long w, int[] sums) {
        int half = len / 2;
        if (idx == half) {
            if (len % 2 == 0)
                check(sums, 0, w, len);
            else
                for (int m = 0; m <= 9; m++)
                    check(sums, 2 * m, w, len);
            return;
        }
        int[] cnt = idx == 0 ? outer : inner;
        for (int s = 0; s <= 18; s++) {
            if (cnt[s] == 0)
                continue;
            sums[idx] = s;
            dfs(len, idx + 1, w * cnt[s], sums);
        }
    }

    static void check(int[] sums, int ct, long w, int ln) {
        int half = ln / 2, carry = 0;
        for (int i = 0; i < ln; i++) {
            int ps;
            if (ln % 2 == 1 && i == half)
                ps = ct;
            else {
                int ix = i < half ? i : ln - 1 - i;
                ps = sums[ix];
            }
            int d = (ps + carry) % 10;
            if (d % 2 == 0)
                return;
            carry = (ps + carry) / 10;
        }
        if (carry > 1)
            return;
        total += w;
    }
}
