import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Введите год (например, 2026): ");
int year = scanner.nextInt();
System.out.print("Введите месяц (1-12): ");
int month = scanner.nextInt();
// 1. Проверяем високосность года
boolean isLeap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
// 2. Определяем количество дней в выбранном месяце
int[] daysInMonths = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (isLeap) {
daysInMonths[2] = 29;
}
int daysInCurrentMonth = daysInMonths[month];
// 3. Вычисляем день недели для 1-го числа (Алгоритм Сакамото)
// 0 = Вс, 1 = Пн, 2 = Вт, 3 = Ср, 4 = Чт, 5 = Пт, 6 = Сб
int y = year - (month < 3 ? 1 : 0);
int[] t = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
int dayOfWeek = (y + y / 4 - y / 100 + y / 400 + t[month - 1] + 1) % 7;
// Переводим в привычный формат с понедельника: 0 = Пн, 1 = Вт, ..., 6 = Вс
int startCol = (dayOfWeek + 6) % 7;
// 4. Выводим заголовок сетки
System.out.println("\n Пн Вт Ср Чт Пт Сб Вс");
// Отступ до первого дня месяца
for (int i = 0; i < startCol; i++) {
System.out.print(" ");
}
// Печать всех чисел месяца
int currentCol = startCol;
for (int day = 1; day <= daysInCurrentMonth; day++) {
System.out.printf("%4d", day);
currentCol++;
// Переход на новую строку в конце недели (после воскресенья)
if (currentCol % 7 == 0) {
System.out.println();
}
}
System.out.println();
scanner.close();
}
}