import java.util.*;
public class Main {
static int[] a = {5,6,8,6,9,1,6,1,2,4,9,1,9,8,2,3,6,4,7,7,5,9,5,0,3,8,7,5,8,1,5,8,6,1,8,3,0,3,7,9,2,7,0,5,8,8,5,7,0,9,9,1,9,4,4,6,8,6,3,3,8,5,1,6,3,4,6,7,0,7,8,2,7,6,8,9,5,6,5,6,1,4,0,1,0,0,9,4,8,0,9,1,2,8,5,0,2,5,3,3};
static Set<String> dates = new HashSet<>();
static int[] daysInMonth = {0,31,28,31,30,31,30,31,31,30,31,30,31};
static boolean[] used = new boolean[a.length];
static boolean isValidDate(String dateStr) {
int year = Integer.parseInt(dateStr.substring(0, 4));
int month = Integer.parseInt(dateStr.substring(4, 6));
int day = Integer.parseInt(dateStr.substring(6, 8));
if (year != 2023 || month < 1 || month > 12 || day < 1 || day > daysInMonth[month]) {
return false;
}
return true;
}
static void generateDateSequences(int index, String currentSequence) {
if (currentSequence.length() == 8) {
if (isValidDate(currentSequence)) {
dates.add(currentSequence);
}
return;
}
// 剪枝:如果当前序列已经无法凑成一个合法日期,则不继续向后递归
if (currentSequence.length() >= 4) {
String yearPart = currentSequence.substring(0, 4);
int year = Integer.parseInt(yearPart);
if (year != 2023) {
return;
}
}
// 剪枝:如果当前月份已经大于12,则不继续向后递归
if (currentSequence.length() >= 6) {
String monthPart = currentSequence.substring(4, 6);
int month = Integer.parseInt(monthPart);
if (month > 12) {
return;
}
}
// 剪枝:如果当前日期大于当前月份的天数,则不继续向后递归
if (currentSequence.length() >= 8) {
String dayPart = currentSequence.substring(6, 8);
int day = Integer.parseInt(dayPart);
String monthPart = currentSequence.substring(4, 6);
int month = Integer.parseInt(monthPart);
if (day > daysInMonth[month]) {
return;
}
}
for (int i = index; i < a.length; i++) {
if (!used[i]) {
used[i] = true;
generateDateSequences(i + 1, currentSequence + a[i]);
used[i] = false;
}
}
}
public static void main(String[] args) {
generateDateSequences(0, "");
System.out.println(dates.size());
}
}