#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>

class Date {
 public:
  Date(int new_year, int new_month, int new_day) {
    year = new_year;
    month = new_month;
    day = new_day;
  }

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

  std::string ToString() const {
    std::ostringstream os;
    os << std::setfill('0');
    os << std::setw(2) << day << '.' << std::setw(2) <<
    month << '.' << std::setw(4) << year;
    return os.str();
  }

  Date DaysLater(int days) const {
    Date new_date(year, month, day);
    while (days > 0) {
      ++new_date.day;
      if ((new_date.month == 1 || new_date.month == 3 || new_date.month == 5 
      ||new_date.month == 7 || new_date.month == 8 || 
      new_date.month == 10 || new_date.month == 12) 
      && new_date.day > 31) {
        if (new_date.month == 12) {
          ++new_date.year;
          new_date.month = 1;
        }
        else {
          ++new_date.month;
        }
        new_date.day = 1;
      }
      else if (new_date.month == 2 && ((new_date.IsLeap() && new_date.day > 29) ||
              (!new_date.IsLeap() && new_date.day > 28))) {
        ++new_date.month;
        new_date.day = 1;
      }
      else {
        if ((new_date.month == 4 || new_date.month == 6 || new_date.month == 9 
        || new_date.month == 11) && new_date.day > 30) {
          new_date.day = 1;
          ++new_date.month;
        }
      }
      --days;
    }
    return new_date;
  }

  int DaysLeft(const Date& date) {
    int a1 = (14 - date.month) / 12;
    int y1 = date.year + 4800 - a1;
    int m1 = date.month + 12 * a1 - 3;
    int jdn1 = date.day + (153 * m1 + 2) / 5 + (365 * y1) + (y1 / 4) - (y1 / 100)
              + (y1 / 400) - 32045;
    int a2 = (14 - month) / 12;
    int y2 = year + 4800 - a2;
    int m2 = month + 12 * a2 - 3;
    int jdn2 = day + (153 * m2 + 2) / 5 + (365 * y2) + (y2 / 4) - (y2 / 100)
              + (y2 / 400) - 32045;
    return abs(jdn2 - jdn1);
  }

 private:
  int year;
  int month;
  int day;
};