#include <string>
#include <sstream>

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

  bool IsLeap() const {
    return (((date_year) % 4) == 0 && \
        (((date_year) % 100) != 0 || ((date_year) % 400) == 0));
  }

  std::string ToString() const {
    std::string string_day = std::to_string(date_day);
    std::string string_month = std::to_string(date_month);
    std::string string_year = std::to_string(date_year);

    for (unsigned int i = 0; i < 2 - string_day.length(); i++) {
      string_day.insert(0, "0");
    }
    for (unsigned int i = 0; i < 2 - string_month.length(); i++) {
      string_month.insert(0, "0");
    }
    while (string_year.length() != 4) {
      string_year.insert(0, "0");
    }
    std::stringstream date;
    date << string_day << "." << string_month << "." << string_year;
    return date.str();
  }

  Date DaysLater(int days) const {
    int year = date_year;
    int day = date_day;
    int month = date_month;
    int no_leap[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int leap[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    while (days != 0) {
      day++;
      if (IsLeap()) {
        if (day > leap[month - 1]) {
          day = 1;
          month++;
        }
      } else if (day > no_leap[month - 1]) {
        day = 1;
        month++;
      }
      if (month > 12) {
        month = 1;
        year++;
      }
      days--;
    }
    Date date(year, month, day);
    return date;
  }

  int DaysLeft(const Date & date) const {
    int year = date_year;
    int day = date_day;
    int month = date_month;
    int no_leap[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int leap[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int counter = 0;
    while ((year != date.date_year) || (month != date.date_month) ||
        (day != date.date_day)) {
      day++;
      counter++;
      if (IsLeap()) {
        if (day > leap[month]) {
          day = 1;
          month++;
        }
      } else if (day > no_leap[month]) {
        day = 1;
        month++;
      }
      if (month > 12) {
        month = 1;
        year++;
      }
    }
    return counter;
  }

 private:
  int date_year;
  int date_month;
  int date_day;
};