import java.util.HashMap;
import java.util.Map;

public class Euler290 {
    static int digitSum(long x) {
        int s = 0;
        while (x > 0) {
            s += (int) (x % 10);
            x /= 10;
        }
        return s;
    }

    public static String solve() {
        int digits = 18;
        int multiplier = 137;
        int kOffset = 500;

        Map<Integer, Long> dp = new HashMap<>();
        dp.put(0 * 1000 + kOffset, 1L);

        for (int pos = 0; pos < digits; ++pos) {
            Map<Integer, Long> next = new HashMap<>((int) (dp.size() * 8 / 0.75f) + 1);
            for (Map.Entry<Integer, Long> entry : dp.entrySet()) {
                int key = entry.getKey();
                long ways = entry.getValue();

                int carry = key / 1000;
                int diff = (key % 1000) - kOffset;

                for (int d = 0; d <= 9; ++d) {
                    int t = multiplier * d + carry;
                    int outDigit = t % 10;
                    int nextCarry = t / 10;
                    int nextDiff = diff + d - outDigit;
                    int nextKey = nextCarry * 1000 + (nextDiff + kOffset);

                    next.put(nextKey, next.getOrDefault(nextKey, 0L) + ways);
                }
            }
            dp = next;
        }

        long answer = 0L;
        for (Map.Entry<Integer, Long> entry : dp.entrySet()) {
            int key = entry.getKey();
            long ways = entry.getValue();
            int carry = key / 1000;
            int diff = (key % 1000) - kOffset;
            if (diff == digitSum(carry)) {
                answer += ways;
            }
        }

        return String.valueOf(answer);
    }

    public static void main(String[] args) {
        System.out.println(solve());
    }
}
