#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
inline int isLeapYear( const int y) {
if ( y% 4 ) {
return 0 ;
}
if ( y% 100 ) {
return 1 ;
}
if ( y% 400 ) {
return 0 ;
}
return 1 ;
}
inline int numOfDaysInMonth( const int m) {
if ( m== 2 ) {
return 28 ;
}
if ( m== 4 || m== 6 || m== 9 || m== 11 ) {
return 30 ;
}
return 31 ;
}
inline int numOfDaysInMonth( const int y, const int m) {
if ( m== 2 ) {
return numOfDaysInMonth( m) + isLeapYear( y) ;
}
else {
return numOfDaysInMonth( m) ;
}
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
const char * s[ 7 ] = { "Sunday" , "Monday" , "Tuesday" , "Wednesday" , "Thursday" , "Friday" , "Saturday" } ;
class Solution{
public :
string dayOfTheWeek( int day, int month, int year) {
int Y = 1971 ;
int M = 1 ;
int D = 1 ;
int res = 5 ;
while ( Y ! = year || M ! = month || D ! = day) {
res++ ;
D++ ;
if ( numOfDaysInMonth( Y,M) < D) {
D = 1 ;
M++ ;
}
if ( M== 13 ) {
M = 1 ;
Y++ ;
}
}
return s[ res% 7 ] ;
}
}
;
// cLay varsion 20190914-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// const char *s[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
//
// class Solution {
// public:
// string dayOfTheWeek(int day, int month, int year) {
// int Y = 1971, M = 1, D = 1;
// int res = 5;
//
// while(Y != year || M != month || D != day){
// res++;
// D++;
// if(numOfDaysInMonth(Y,M) < D) D = 1, M++;
// if(M==13) M = 1, Y++;
// }
//
// return s[res%7];
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmlubGluZSBpbnQgaXNMZWFwWWVhcihjb25zdCBpbnQgeSl7CiAgaWYoeSU0KXsKICAgIHJldHVybiAwOwogIH0KICBpZih5JTEwMCl7CiAgICByZXR1cm4gMTsKICB9CiAgaWYoeSU0MDApewogICAgcmV0dXJuIDA7CiAgfQogIHJldHVybiAxOwp9CmlubGluZSBpbnQgbnVtT2ZEYXlzSW5Nb250aChjb25zdCBpbnQgbSl7CiAgaWYobT09Mil7CiAgICByZXR1cm4gMjg7CiAgfQogIGlmKG09PTR8fG09PTZ8fG09PTl8fG09PTExKXsKICAgIHJldHVybiAzMDsKICB9CiAgcmV0dXJuIDMxOwp9CmlubGluZSBpbnQgbnVtT2ZEYXlzSW5Nb250aChjb25zdCBpbnQgeSwgY29uc3QgaW50IG0pewogIGlmKG09PTIpewogICAgcmV0dXJuIG51bU9mRGF5c0luTW9udGgobSkrIGlzTGVhcFllYXIoeSk7CiAgfQogIGVsc2V7CiAgICByZXR1cm4gbnVtT2ZEYXlzSW5Nb250aChtKTsKICB9Cn0KI2RlZmluZSBtYWluIGR1bW15X21haW4KaW50IG1haW4oKXsKICByZXR1cm4gMDsKfQojdW5kZWYgbWFpbgpjb25zdCBjaGFyICpzWzddID0geyJTdW5kYXkiLCAiTW9uZGF5IiwgIlR1ZXNkYXkiLCAiV2VkbmVzZGF5IiwgIlRodXJzZGF5IiwgIkZyaWRheSIsICJTYXR1cmRheSJ9OwpjbGFzcyBTb2x1dGlvbnsKICBwdWJsaWM6CiAgc3RyaW5nIGRheU9mVGhlV2VlayhpbnQgZGF5LCBpbnQgbW9udGgsIGludCB5ZWFyKXsKICAgIGludCBZID0gMTk3MTsKICAgIGludCBNID0gMTsKICAgIGludCBEID0gMTsKICAgIGludCByZXMgPSA1OwogICAgd2hpbGUoWSAhPSB5ZWFyIHx8IE0gIT0gbW9udGggfHwgRCAhPSBkYXkpewogICAgICByZXMrKzsKICAgICAgRCsrOwogICAgICBpZihudW1PZkRheXNJbk1vbnRoKFksTSkgPCBEKXsKICAgICAgICBEID0gMTsKICAgICAgICBNKys7CiAgICAgIH0KICAgICAgaWYoTT09MTMpewogICAgICAgIE0gPSAxOwogICAgICAgIFkrKzsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNbcmVzJTddOwogIH0KfQo7Ci8vIGNMYXkgdmFyc2lvbiAyMDE5MDkxNC0xCgovLyAtLS0gb3JpZ2luYWwgY29kZSAtLS0KLy8gI2RlZmluZSBtYWluIGR1bW15X21haW4KLy8ge30KLy8gI3VuZGVmIG1haW4KLy8gCi8vIGNvbnN0IGNoYXIgKnNbN10gPSB7IlN1bmRheSIsICJNb25kYXkiLCAiVHVlc2RheSIsICJXZWRuZXNkYXkiLCAiVGh1cnNkYXkiLCAiRnJpZGF5IiwgIlNhdHVyZGF5In07Ci8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICBzdHJpbmcgZGF5T2ZUaGVXZWVrKGludCBkYXksIGludCBtb250aCwgaW50IHllYXIpIHsKLy8gICAgIGludCBZID0gMTk3MSwgTSA9IDEsIEQgPSAxOwovLyAgICAgaW50IHJlcyA9IDU7Ci8vIAovLyAgICAgd2hpbGUoWSAhPSB5ZWFyIHx8IE0gIT0gbW9udGggfHwgRCAhPSBkYXkpewovLyAgICAgICByZXMrKzsKLy8gICAgICAgRCsrOwovLyAgICAgICBpZihudW1PZkRheXNJbk1vbnRoKFksTSkgPCBEKSBEID0gMSwgTSsrOwovLyAgICAgICBpZihNPT0xMykgTSA9IDEsIFkrKzsKLy8gICAgIH0KLy8gCi8vICAgICByZXR1cm4gc1tyZXMlN107Ci8vICAgfQovLyB9Owo=