public class Euler19 {
    static boolean isLeapYear(int year) {
        if (year % 400 == 0)
            return true;
        if (year % 100 == 0)
            return false;
        return year % 4 == 0;
    }

    static int daysInMonth(int year, int month) {
        int[] md = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        if (month == 2 && isLeapYear(year))
            return 29;
        return md[month];
    }

    static int weekdayMondayZero(int year, int month, int day) {
        int days = 0;
        for (int y = 1900; y < year; y++)
            days += isLeapYear(y) ? 366 : 365;
        for (int m = 1; m < month; m++)
            days += daysInMonth(year, m);
        days += day - 1;
        return days % 7;
    }

    static int solve(int startYear, int endYear) {
        int count = 0;
        for (int y = startYear; y <= endYear; y++)
            for (int m = 1; m <= 12; m++)
                if (weekdayMondayZero(y, m, 1) == 6)
                    count++;
        return count;
    }

    public static void main(String[] args) {
        assert solve(1901, 1901) == 2 : "Checkpoint failed";
        System.out.println(solve(1901, 2000));
    }
}
