UVA602.
#include<bits/stdc++.h>
using namespace std;
string China[7]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
string America[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
string M[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};
struct date{
int year,month,day;
string sdate,smonth;
};
date START,use;
int normal_days;
bool jud(int x){
if(x<=1752)return x%4==0;
else{
if(x%400==0)return 1;
else if(x%100==0)return 0;
else if(x%4==0)return 1;
else return 0;
}
}
bool invalid(date x){
if(x.year<1)return 0;
if(x.month>12 || x.month<1)return 0;
if(x.day>31 || x.day<1)return 0;
if(x.month==4||x.month==6||x.month==9||x.month==11){
if(x.day>30)return 0;
}
if(x.month==2){
if(jud(x.year)){
if(x.day>29)return 0;
}
else {
if(x.day>28)return 0;
}
}
if(x.year==1752 && x.month==9 && x.day>=3 && x.day<=13)return 0;
return 1;
}
void give(date &x,long long y,long long w){
if(y>w)y-=11;
int z=y%7;
x.smonth=M[x.month-1];
z==0?z=7:z;
x.sdate=America[z-1];
return ;
}
long long daycount(date x){
long long ans;
for(int i=1;i<x.year;i++){
jud(i)?ans+=366:ans+=365;
}
for(int i=1;i<x.month;i++){
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)ans+=31;
else if(i==4||i==6||i==9||i==11)ans+=30;
else jud(x.year)?ans+=29:ans+=28;
}
ans+=x.day;
return ans;
}
int main(){
START.year=1752,START.month=9,START.day=2;
normal_days=daycount(START);
while(scanf("%d%d%d",&use.month,&use.day,&use.year) && (use.month||use.day||use.year)){
if(!invalid(use)){
printf("%d/%d/%d is an invalid date.\n",use.month,use.day,use.year);
continue;
}
give(use,daycount(use),normal_days);
cout<<use.smonth<<" "<<use.day<<", "<<use.year<<" is a "<<use.sdate<<"\n";
}
return 0;
}