#include <stdio.h>
// M = 달 별 마지막 날을 저장한 배열
// W = 요일들을 저장한 배열
int M[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 };
char W[7][4] = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" };
// 입력: 윤년을 확인할 년도 y
// 출력: 윤년이면 1, 아니면 0
int is_yun_year(int y)
{
return (((y % 4) == 0) && ((y % 100 != 0)) || ((y % 400) == 0));
}
int main()
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
int num = 0;
// a * b * c를 한 값에서 1까지 빼주며 최소공배수를 구해준다.
for (int i = a * b * c; i >= 1; i--)
{
if (i % a == 0 && i % b == 0 && i % c == 0) num = i;
}
// year = 정답 년도, month = 정답 월, day = 정답일, week = 정답 요일
// 초기값은 2100년 1월 1일 금요일
int year = 2100, month = 1, day = 1, week = 5;
while (1)
{
// 만약 is_yun_year 함수에서 결과가 1이 나오면 윤년이란 뜻인데
// M[2]가 2월 달 끝부분이므로 29로 바꾼다.
if (is_yun_year(year))
M[2] = 29;
else
M[2] = 28; // 윤년이 아니면 28로 둔다.
if (num >= M[month]) // 만약 현재 달의 마지막 날을 넘은 상황
{
num -= M[month]; // num에 달 수를 뺸다.
week += M[month]; // 요일에 지난 달 수를 더해준다.
week %= 7; // week를 7로 나눈 값의 나머지를 저장하여 요일값으로 업데이트한다.
month++; // 달을 하나 올린다.
if (month == 13) // 만약 month가 13이면 년도를 올려줘야 하므로
{
year++; // 년도를 올려주고
month = 1; // 달을 1로 바꿔준다.
}
}
else break; //num가 M[month]를 넘지 않으면 이 반복문을 나간다.
}
// week와 num을 더한 값에 7로 나눈 값의 나머지를 저장시키며 요일을 구해준다.
week = (week + num) % 7;
// 년도는 4칸에 맞춰서 출력하고
// 월과 일은 2칸에 맞춰 출력한다.
// 요일은 요일들이 있는 배열 W에서 골라 출력해준다.
printf("%04d-%02d-%02d %s", year, month, day + num, W[week]);
}