class Date(){
public:

Date(int year, int month, int day){
    date_year = year;
    date_month = month;
    date_day = day;
}

bool IsLeap() const{
if (date_year % 4 == 0) {
    if (date_year % 100 == 0) {
        if (date_year % 400 == 0) {
            return true;
        }
        else return false;
    }
    else return true;
}
return false;
}

string ToString() const{
    string_day = to_string(date_day);
    string_month = to_string(date_month);
    string_year = to_string(date_year);
    if (date_day < 10){
        string_day = "0" + string_day;
    }
    if (date_month < 10){
        string_month = "0" + string_month;
    }
    if (date_year < 10){
        string_year = "000" + string_year;
    } else if (date_year >= 10 && date_year < 100){
        string_year = "00" + string_year;
    } else if (date_year >= 100 && date_year < 1000){
        string_year = "0" + string_year;
    }
    return string_day + "." + string_month + "." + string_year;
}

Date DaysLater(int days) const {
if (date_day + days == date_day){
    return {date_year, date_month, date_day};
} else {
    while (days > 0){
        days--;
        if (date_month == 2 && date_day == 28){
            if ({date_year, date_month, date_day}.IsLeap()){
                date_day++;
            }
        } else if (date_month == 12 && date_day == 31){
            date_day = 1;
            date_month = 1;
            date_year++;
        } else if (date_day < count_of_days[date_month]){
            date_day++;
        } else{
            date_day = 1;
            date_month++;
        }
    }
}
return {date_year, date_month, date_day};
}

int DaysLeft(const Date& date) const {
int counter = 0;
while (date_year != date.date_year && date_month != date.date_month && date_day != date.date_day){
    if (date_month == 2 && date_day == 28){
        if ({date_year, date_month, date_day}.IsLeap()){
            counter++;
            date_day++;
        }
    } else if (date_month == 12 && date_day == 31){
        date_day = 1;
        date_month = 1;
        date_year++;
        counter++;
    } else if (date_day < count_of_days[date_month]){
        date_day++;
        counter++;
    } else{
        date_day = 1;
        date_month++;
        counter++;
    }
}
return counter;
}

private:
    int date_year;
    int date_month;
    int date_day;
    int[12] count_of_days = {31,28,31,30,31,30,31,31,30,31,30,31};
}