#include <iostream>
bool isLeapYear( const uint16_t year )
{
return ( (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0) );
}
uint8_t getDaysInMonth( const uint8_t month, const uint16_t year )
{
if ( month == 2 )
return isLeapYear( year ) ? 29 : 28;
else if ( month == 4 || month == 6 || month == 9 || month == 11 )
return 30;
return 31;
}
uint16_t getDaysInYear( const uint16_t year )
{
return isLeapYear( year ) ? 366 : 365;
}
int main()
{
int startYear = 1998;
int daysOffset = 4003;
int d = daysOffset+1;
int m = 1;
int y = startYear;
while ( d > getDaysInYear( y ) )
d -= getDaysInYear( y++ );
while ( d > getDaysInMonth( m, y ) )
d -= getDaysInMonth( m++, y );
printf( "%d %d %d", d, m, y );
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKYm9vbCBpc0xlYXBZZWFyKCBjb25zdCB1aW50MTZfdCB5ZWFyICkKewogIHJldHVybiAoICh5ZWFyICUgNDAwID09IDApIHx8ICh5ZWFyICUgNCA9PSAwICYmIHllYXIgJSAxMDAgIT0gMCkgKTsKfQoKdWludDhfdCBnZXREYXlzSW5Nb250aCggY29uc3QgdWludDhfdCBtb250aCwgY29uc3QgdWludDE2X3QgeWVhciApCnsKICBpZiAoIG1vbnRoID09IDIgKSAgCiAgICByZXR1cm4gaXNMZWFwWWVhciggeWVhciApID8gMjkgOiAyODsKICAgIAogIGVsc2UgaWYgKCBtb250aCA9PSA0IHx8IG1vbnRoID09IDYgfHwgbW9udGggPT0gOSB8fCBtb250aCA9PSAxMSApICAKICAgICAgcmV0dXJuIDMwOwogICAgICAKICByZXR1cm4gMzE7Cn0KCnVpbnQxNl90IGdldERheXNJblllYXIoIGNvbnN0IHVpbnQxNl90IHllYXIgKQp7CiAgcmV0dXJuIGlzTGVhcFllYXIoIHllYXIgKSA/IDM2NiA6IDM2NTsKfQoKCmludCBtYWluKCkKewoJaW50IHN0YXJ0WWVhciA9IDE5OTg7CglpbnQgZGF5c09mZnNldCA9IDQwMDM7CgkKCQoJaW50IGQgPSBkYXlzT2Zmc2V0KzE7CglpbnQgbSA9IDE7CglpbnQgeSA9IHN0YXJ0WWVhcjsKCQoJd2hpbGUgKCBkID4gZ2V0RGF5c0luWWVhciggeSApICkKCQlkIC09IGdldERheXNJblllYXIoIHkrKyApOwoJCgl3aGlsZSAoIGQgPiBnZXREYXlzSW5Nb250aCggbSwgeSApICkKCQlkIC09IGdldERheXNJbk1vbnRoKCBtKyssIHkgKTsKCgoJcHJpbnRmKCAiJWQgJWQgJWQiLCBkLCBtLCB5ICk7CgoKCXJldHVybiAwOwp9