import java.util.Calendar;
import java.util.GregorianCalendar;

public class APCalendar
{
    private static boolean isLeapYear(int year)
    {
        return new GregorianCalendar().isLeapYear(year);
    }

    public static int numberOfLeapYears(int year1, int year2)
    {
        int leapYears = 0;

        for(int y = year1; y <= year2; y++)
            if(isLeapYear(y))
                leapYears++;

        return leapYears;
    }

    private static int firstDayOfYear(int year)
    {
        GregorianCalendar gc = new GregorianCalendar(year, Calendar.JANUARY, 1);
        return gc.get(Calendar.DAY_OF_WEEK) - 1;
    }

    private static int dayOfYear(int month, int day, int year)
    {
        GregorianCalendar gc = new GregorianCalendar(year, month - 1, day);
        return gc.get(Calendar.DAY_OF_YEAR);
    }

    public static int dayOfWeek(int month, int day, int year)
    {
        int additionalDays = dayOfYear(month, day, year) - 1;
        return (firstDayOfYear(year) + additionalDays) % 7;
    }

    public static int dayOfWeekOriginal(int month, int day, int year)
    {
        int weekday = firstDayOfYear(year);
        int additionalDays = dayOfYear(month, day, year) - 1;

        for(int d = 1; d <= additionalDays; d++)
        {
            weekday++;

            if(weekday == 7)
                weekday = 0;
        }

        return weekday;
    }
}
