public class Euler92 {
    static int[] memo = new int[600];

    static int chainEnd(int n) {
        if (n == 1)
            return 1;
        if (n == 89)
            return 89;
        if (n < 600 && memo[n] != 0)
            return memo[n];
        int s = 0;
        for (int t = n; t > 0; t /= 10) {
            int d = t % 10;
            s += d * d;
        }
        int r = chainEnd(s);
        if (n < 600)
            memo[n] = r;
        return r;
    }

    public static void main(String[] args) {
        int count = 0;
        for (int n = 1; n < 10000000; n++)
            if (chainEnd(n) == 89)
                count++;
        System.out.println(count);
    }
}
