#include <string>
#include <cstdint>

class Date {
 public:
    int y, m, d;
    Date(int year, int month, int day);
    bool IsLeap() const;
    std::string ToString() const;
    Date DaysLater(int days) const;
    int DaysLeft(const Date& date) const;
    void NextDay();
};


int md[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

Date::Date(int year, int month, int day) {
    y = year;
    m = month;
    d = day;
}
bool Date::IsLeap() const {
    return (y % 4 == 0 && (y % 100 != 0 || y % 400 == 0));
}
std::string Date::ToString() const {
    std::string ans = "";
    if (d < 10)
        ans += "0";
    ans += std::to_string(d) + ".";
    if (m < 10)
        ans += "0";
    ans += std::to_string(m) + ".";
    for (int i = y; i < 1000; i *= 10)
        ans += "0";
    ans += std::to_string(y);
    return ans;
}
Date Date::DaysLater(int days) const {
    Date ans(y, m, d);
    for (int i = 0; i < days; i++)
        ans.NextDay();
    return ans;
}
int Date::DaysLeft(const Date& date) const {
    Date ans(y, m, d);
    int cnt = 0;
    while (ans.d != date.d || ans.m != date.m || ans.y != date.y) {
        ans.NextDay();
        cnt++;
    }
    return cnt;
}

void Date::NextDay() {
    d++;
    if (d >= md[m] + 1) {
        if ((m == 2 && IsLeap() && d == 30) || !(m == 2 && IsLeap())) {
            d = 1;
            m++;
        }
    }
    if (m == 13) {
        m = 1;
        y++;
    }
}