#include <stdio.h>
int is_uruu(int year){
if(year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)){
return 1;
}
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 && is_uruu(y) == 1){
return 29;
}
else{
return 28;
}
}
int days_from(int y, int m, int d){
int ans=0, i;
for(i=1;i<=m-1;i++){
ans += maxday_of_month(y,i);
}
ans--;
ans += d;
return ans;
}
int days_from_1900_1_1(int y, int m, int d){
int ans=0, i;
for(i=1900;i<=y-1;i++){
ans += days_from(i,12,31) + 1;
}
ans += days_from(y,m,d);
return ans;
}
int what_day(int y, int m, int d){
switch(days_from_1900_1_1(y,m,d)%7){
case 0:
return 1;
//月曜
case 1:
return 2;
case 2:
return 3;
case 3:
return 4;
case 4:
return 5;
case 5:
return 6;
case 6:
return 0;
}
}
void calendar(int y, int m){
printf("Su Mo Tu We Th Fr Sa\n"); int first = what_day(y,m,1), i;
for(i=0;i<first;i++){
}
for(i=1;i<=maxday_of_month(y,m);i++){
if((i + first) % 7 == 0){
}
}
}
int main(void) {
int y=2025, m=4;
calendar(y,m);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgaXNfdXJ1dShpbnQgeWVhcil7CglpZih5ZWFyICUgNCA9PSAwICYmICh5ZWFyICUgMTAwICE9IDAgfHwgeWVhciAlIDQwMCA9PSAwKSl7CgkJcmV0dXJuIDE7Cgl9CglyZXR1cm4gMDsKfQoKaW50IG1heGRheV9vZl9tb250aChpbnQgeSwgaW50IG0pewoJaWYobT09MSB8fCBtPT0zIHx8IG09PTUgfHwgbT09NyB8fCBtPT04IHx8IG09PTEwIHx8IG09PTEyKXsKCQlyZXR1cm4gMzE7Cgl9CgllbHNlIGlmKG09PTQgfHwgbT09NiB8fCBtPT05IHx8IG09PTExKXsKCQlyZXR1cm4gMzA7Cgl9CgllbHNlIGlmKG0gPT0gMiAmJiBpc191cnV1KHkpID09IDEpewoJCXJldHVybiAyOTsKCX0KCWVsc2V7CgkJcmV0dXJuIDI4OwoJfQp9CgppbnQgZGF5c19mcm9tKGludCB5LCBpbnQgbSwgaW50IGQpewoJaW50IGFucz0wLCBpOwoJZm9yKGk9MTtpPD1tLTE7aSsrKXsKCQlhbnMgKz0gbWF4ZGF5X29mX21vbnRoKHksaSk7Cgl9CglhbnMtLTsKCWFucyArPSBkOwoJcmV0dXJuIGFuczsKfQoKaW50IGRheXNfZnJvbV8xOTAwXzFfMShpbnQgeSwgaW50IG0sIGludCBkKXsKCWludCBhbnM9MCwgaTsKCWZvcihpPTE5MDA7aTw9eS0xO2krKyl7CgkJYW5zICs9IGRheXNfZnJvbShpLDEyLDMxKSArIDE7Cgl9CglhbnMgKz0gZGF5c19mcm9tKHksbSxkKTsKCXJldHVybiBhbnM7Cn0KCmludCB3aGF0X2RheShpbnQgeSwgaW50IG0sIGludCBkKXsKCXN3aXRjaChkYXlzX2Zyb21fMTkwMF8xXzEoeSxtLGQpJTcpewoJCWNhc2UgMDoKCQkJcmV0dXJuIDE7CgkJCS8v5pyI5pucCgkJY2FzZSAxOgoJCQlyZXR1cm4gMjsKCQljYXNlIDI6CgkJCXJldHVybiAzOwoJCWNhc2UgMzoKCQkJcmV0dXJuIDQ7CgkJY2FzZSA0OgoJCQlyZXR1cm4gNTsKCQljYXNlIDU6CgkJCXJldHVybiA2OwoJCWNhc2UgNjoKCQkJcmV0dXJuIDA7Cgl9Cn0KCnZvaWQgY2FsZW5kYXIoaW50IHksIGludCBtKXsKCXByaW50ZigiU3UgTW8gVHUgV2UgVGggRnIgU2FcbiIpOwoJaW50IGZpcnN0ID0gd2hhdF9kYXkoeSxtLDEpLCBpOwoJZm9yKGk9MDtpPGZpcnN0O2krKyl7CgkJcHJpbnRmKCIgICAiKTsKCX0KCWZvcihpPTE7aTw9bWF4ZGF5X29mX21vbnRoKHksbSk7aSsrKXsKCQlwcmludGYoIiUyZCAiLGkpOwoJCWlmKChpICsgZmlyc3QpICUgNyA9PSAwKXsKCQkJcHJpbnRmKCJcbiIpOwoJCX0KCX0KCn0KCmludCBtYWluKHZvaWQpIHsKCWludCB5PTIwMjUsIG09NDsKCWNhbGVuZGFyKHksbSk7CglyZXR1cm4gMDsKfQ==