#include <stdio.h>//第0講演習 3-5
int is_uruu(int year){
if(year%4==0){
if(year%100==0){
if(year%400==0) return 1;
else return 0;
}
else return 1;
}
else return 0;
}
int maxday_of_month(int y, int m){
if(m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12){
return 31;
}
else if(m==4 || m==6 || m==9 || m==11){
return 30;
}
else if(m==2){
int a;
a=is_uruu(y);
if(a==1) return 29;
else if (a==0) return 28;
}
}
int days_from(int y, int m){
int i,s=0;
if(y>=1900){
for(i=1;i<m;i++){
s=s+maxday_of_month(y,i);
}
return s+1;
}
if(y<1900){
for(i=12;i>=m;i--){
s=s+maxday_of_month(y,i);
}
return s;
}
}
int hi_year(int y){
int i,j=0,a;
if(y>=1900){
for(i=1900;i<y;i++){
a=is_uruu(i);
if(a==1) j=j+366;
else if(a==0) j=j+365;
}
return j;
}
else if(y<1900){
for(i=y;i<1900;i++){
a=is_uruu(i);
if(a==1) j=j+366;
else if(a==0) j=j+365;
}
return j;
}
}
int suu_yobi(int y, int m){
int a,b,c;
a=hi_year(y);
b=days_from(y,m);
c=(a+b)%7;
if(y>=1900){
if(c==0) return 0;//日
else if(c==1) return 1;//月
else if(c==2) return 2;//火
else if(c==3) return 3;//水
else if(c==4) return 4;//木
else if(c==5) return 5;//金
else if(c==6) return 6;//土
}
if(y<1900){
if(c==0) return 2;//火
else if(c==1) return 1;//月
else if(c==2) return 0;//日
else if(c==3) return 6;//土
else if(c==4) return 5;//金
else if(c==5) return 4;//木
else if(c==6) return 3;//水
}
}
void tuitati(int yobi, int y,int m){
int day,i;
day=maxday_of_month(y,m);
if(yobi==0){
for(i=2;i<=day;i++){
}
return ;
}
if(yobi==1){
for(i=2;i<=day;i++){
}
return ;
}
if(yobi==2){
for(i=2;i<=day;i++){
}
return ;
}
if(yobi==3){
for(i=2;i<=day;i++){
}
return ;
}
if(yobi==4){
for(i=2;i<=day;i++){
}
return ;
}
if(yobi==5){
for(i=2;i<=day;i++){
}
return ;
}
if(yobi==6){
for(i=2;i<=day;i++){
}
return ;
}
}
int main() {
int year,month,yobi;
scanf("%d %d",&year
,&month
); yobi=suu_yobi(year,month);
printf("%d年%d月のカレンダー\n",year
,month
); printf(" Su Mo Tu We Th Fr Sa\n"); tuitati(yobi,year,month);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Ly/nrKzvvJDorJvmvJTnv5IgMy01CgppbnQgaXNfdXJ1dShpbnQgeWVhcil7CglpZih5ZWFyJTQ9PTApewoJCWlmKHllYXIlMTAwPT0wKXsKCQkJaWYoeWVhciU0MDA9PTApIHJldHVybiAxOwoJCQllbHNlIHJldHVybiAwOwoJCX0KCQllbHNlIHJldHVybiAxOwoJfQoJZWxzZSByZXR1cm4gMDsKfQppbnQgbWF4ZGF5X29mX21vbnRoKGludCB5LCBpbnQgbSl7CglpZihtPT0xIHx8IG09PTMgfHwgbT09NSB8fCBtPT03IHx8IG09PTggfHwgbT09MTAgfHwgbT09MTIpewoJCXJldHVybiAzMTsKCX0KCWVsc2UgaWYobT09NCB8fCBtPT02IHx8IG09PTkgfHwgbT09MTEpewoJCXJldHVybiAzMDsKCX0KCWVsc2UgaWYobT09Mil7CgkJaW50IGE7CgkJYT1pc191cnV1KHkpOwoJCWlmKGE9PTEpIHJldHVybiAyOTsKCQllbHNlIGlmIChhPT0wKSByZXR1cm4gMjg7Cgl9Cn0KaW50IGRheXNfZnJvbShpbnQgeSwgaW50IG0pewoJaW50IGkscz0wOwoJaWYoeT49MTkwMCl7CgkJZm9yKGk9MTtpPG07aSsrKXsKCQkJcz1zK21heGRheV9vZl9tb250aCh5LGkpOwoJCX0KCQlyZXR1cm4gcysxOwoJfQoJaWYoeTwxOTAwKXsKCQlmb3IoaT0xMjtpPj1tO2ktLSl7CgkJCXM9cyttYXhkYXlfb2ZfbW9udGgoeSxpKTsKCQl9CgkJcmV0dXJuIHM7Cgl9Cn0KaW50IGhpX3llYXIoaW50IHkpewoJaW50IGksaj0wLGE7CglpZih5Pj0xOTAwKXsKCQlmb3IoaT0xOTAwO2k8eTtpKyspewoJCWE9aXNfdXJ1dShpKTsKCQlpZihhPT0xKSBqPWorMzY2OwoJCWVsc2UgaWYoYT09MCkgaj1qKzM2NTsKCSAgICB9CgkgICAgcmV0dXJuIGo7Cgl9CgllbHNlIGlmKHk8MTkwMCl7CgkJZm9yKGk9eTtpPDE5MDA7aSsrKXsKCQlhPWlzX3VydXUoaSk7CgkJaWYoYT09MSkgaj1qKzM2NjsKCQllbHNlIGlmKGE9PTApIGo9aiszNjU7CgkgICAgfQoJICAgIHJldHVybiBqOwoJfQp9CmludCBzdXVfeW9iaShpbnQgeSwgaW50IG0pewoJaW50IGEsYixjOwoJYT1oaV95ZWFyKHkpOwoJYj1kYXlzX2Zyb20oeSxtKTsKCWM9KGErYiklNzsKCWlmKHk+PTE5MDApewoJCWlmKGM9PTApIHJldHVybiAwOy8v5pelCgkJZWxzZSBpZihjPT0xKSByZXR1cm4gMTsvL+aciAoJCWVsc2UgaWYoYz09MikgcmV0dXJuIDI7Ly/ngasKCQllbHNlIGlmKGM9PTMpIHJldHVybiAzOy8v5rC0CgkJZWxzZSBpZihjPT00KSByZXR1cm4gNDsvL+acqAoJCWVsc2UgaWYoYz09NSkgcmV0dXJuIDU7Ly/ph5EKCQllbHNlIGlmKGM9PTYpIHJldHVybiA2Oy8v5ZyfCgl9CglpZih5PDE5MDApewoJCWlmKGM9PTApIHJldHVybiAyOy8v54GrCgkJZWxzZSBpZihjPT0xKSByZXR1cm4gMTsvL+aciAoJCWVsc2UgaWYoYz09MikgcmV0dXJuIDA7Ly/ml6UKCQllbHNlIGlmKGM9PTMpIHJldHVybiA2Oy8v5ZyfCgkJZWxzZSBpZihjPT00KSByZXR1cm4gNTsvL+mHkQoJCWVsc2UgaWYoYz09NSkgcmV0dXJuIDQ7Ly/mnKgKCQllbHNlIGlmKGM9PTYpIHJldHVybiAzOy8v5rC0Cgl9Cn0Kdm9pZCB0dWl0YXRpKGludCB5b2JpLCBpbnQgeSxpbnQgbSl7CglpbnQgZGF5LGk7CglkYXk9bWF4ZGF5X29mX21vbnRoKHksbSk7CglpZih5b2JpPT0wKXsKCQlwcmludGYoIiAgMSIpOwoJCWZvcihpPTI7aTw9ZGF5O2krKyl7CgkJCWlmKGk8MTApcHJpbnRmKCIgICVkIixpKTsKCQkJZWxzZSBwcmludGYoIiAlZCIsaSk7CgkJCWlmKGklNz09MClwcmludGYoIlxuIik7CgkJfQoJCXJldHVybiA7Cgl9CgllbHNlIHByaW50ZigiICAgIik7CglpZih5b2JpPT0xKXsKCQlwcmludGYoIiAgMSIpOwoJCWZvcihpPTI7aTw9ZGF5O2krKyl7CgkJCWlmKGk8MTApcHJpbnRmKCIgICVkIixpKTsKCQkJZWxzZSBwcmludGYoIiAlZCIsaSk7CgkJCWlmKGklNz09NilwcmludGYoIlxuIik7CgkJfQoJCXJldHVybiA7Cgl9CgllbHNlIHByaW50ZigiICAgIik7CglpZih5b2JpPT0yKXsKCQlwcmludGYoIiAgMSIpOwoJCWZvcihpPTI7aTw9ZGF5O2krKyl7CgkJCWlmKGk8MTApcHJpbnRmKCIgICVkIixpKTsKCQkJZWxzZSBwcmludGYoIiAlZCIsaSk7CgkJCWlmKGklNz09NSlwcmludGYoIlxuIik7CgkJfQoJCXJldHVybiA7Cgl9CgllbHNlIHByaW50ZigiICAgIik7CglpZih5b2JpPT0zKXsKCQlwcmludGYoIiAgMSIpOwoJCWZvcihpPTI7aTw9ZGF5O2krKyl7CgkJCWlmKGk8MTApcHJpbnRmKCIgICVkIixpKTsKCQkJZWxzZSBwcmludGYoIiAlZCIsaSk7CgkJCWlmKGklNz09NClwcmludGYoIlxuIik7CgkJfQoJCXJldHVybiA7Cgl9CgllbHNlIHByaW50ZigiICAgIik7CglpZih5b2JpPT00KXsKCQlwcmludGYoIiAgMSIpOwoJCWZvcihpPTI7aTw9ZGF5O2krKyl7CgkJCWlmKGk8MTApcHJpbnRmKCIgICVkIixpKTsKCQkJZWxzZSBwcmludGYoIiAlZCIsaSk7CgkJCWlmKGklNz09MylwcmludGYoIlxuIik7CgkJfQoJCXJldHVybiA7Cgl9CgllbHNlIHByaW50ZigiICAgIik7CglpZih5b2JpPT01KXsKCQlwcmludGYoIiAgMSIpOwoJCWZvcihpPTI7aTw9ZGF5O2krKyl7CgkJCWlmKGk8MTApcHJpbnRmKCIgICVkIixpKTsKCQkJZWxzZSBwcmludGYoIiAlZCIsaSk7CgkJCWlmKGklNz09MilwcmludGYoIlxuIik7CgkJfQoJCXJldHVybiA7Cgl9CgllbHNlIHByaW50ZigiICAgIik7CglpZih5b2JpPT02KXsKCQlwcmludGYoIiAgMVxuIik7CgkJZm9yKGk9MjtpPD1kYXk7aSsrKXsKCQkJaWYoaTwxMClwcmludGYoIiAgJWQiLGkpOwoJCQllbHNlIHByaW50ZigiICVkIixpKTsKCQkJaWYoaSU3PT0xKXByaW50ZigiXG4iKTsKCQl9CgkJcmV0dXJuIDsKCX0KfQppbnQgbWFpbigpIHsKCWludCB5ZWFyLG1vbnRoLHlvYmk7CglzY2FuZigiJWQgJWQiLCZ5ZWFyLCZtb250aCk7Cgl5b2JpPXN1dV95b2JpKHllYXIsbW9udGgpOwoJcHJpbnRmKCIlZOW5tCVk5pyI44Gu44Kr44Os44Oz44OA44O8XG4iLHllYXIsbW9udGgpOwoJcHJpbnRmKCIgU3UgTW8gVHUgV2UgVGggRnIgU2FcbiIpOwoJdHVpdGF0aSh5b2JpLHllYXIsbW9udGgpOwoJCglyZXR1cm4gMDsKfQ==