void increment_datetime(char* stamp) { char limit, roll; if (stamp[13] < '9') { ++stamp[13]; return; } stamp[13] = '0'; if (stamp[12] < '5') { ++stamp[12]; return; } stamp[12] = '0'; if (stamp[11] < '9') { ++stamp[11]; return; } stamp[11] = '0'; if (stamp[10] < '5') { ++stamp[10]; return; } stamp[10] = '0'; if (stamp[ 9] < ((stamp[8] == '2') ? '3' : '9')) { ++stamp[ 9]; return; } stamp[ 9] = '0'; if (stamp[ 8] < '2') { ++stamp[ 8]; return; } stamp[ 8] = '0'; limit = "0181010110101"[(stamp[4] * 10 + stamp[5]) & 0xf]; roll = (stamp[6] == '3' - (limit == '8')); if (stamp[7] < '9' && (stamp[7] != limit || !roll || (limit == '8' && !(((stamp[2] << 1) ^ stamp[3]) & 3) && ((stamp[2] | stamp[3]) != '0' || !(((stamp[0] << 1) ^ stamp[1]) & 3))))) { ++stamp[ 7]; return; } stamp[ 7] = '0' + roll; if (!roll) { ++stamp[ 6]; return; } stamp[ 6] = '0'; roll = (stamp[4] == '1'); if (stamp[ 5] < (roll ? '2' : '9')) { ++stamp[ 5]; return; } stamp[ 5] = '0' + roll; if (stamp[ 4] < '1') { ++stamp[ 4]; return; } stamp[ 4] = '0'; if (stamp[ 3] < '9') { ++stamp[ 3]; return; } stamp[ 3] = '0'; if (stamp[ 2] < '9') { ++stamp[ 2]; return; } stamp[ 2] = '0'; if (stamp[ 1] < '9') { ++stamp[ 1]; return; } stamp[ 1] = '0'; if (stamp[ 0] < '9') { ++stamp[ 0]; return; } stamp[ 0] = '0'; } #include #include int main() { char stamp[20]; while (cin.getline(stamp, sizeof(stamp))) { increment_datetime(stamp); std::cout << stamp << std::endl; } return 0; }