import java.util.Scanner;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
new Main();
}
TreeSet<String>set=new TreeSet<String>();
public Main() {
Scanner in = new Scanner(System.in);
String s=in.next();
String ss[]=s.split("/");
int arr[]=new int[3];
for(int i=0;i<3;i++){
arr[i]=Integer.parseInt(ss[i]);
}
//三种可能
check(arr[0],arr[1],arr[2]);
check(arr[2],arr[0],arr[1]);
check(arr[2],arr[1],arr[0]);
for(String v:set)
System.out.println(v);
}
int f[]= {31,31,28,31,30,31,30,31,31,30,31,30,31};//平
int d[]= {31,31,29,31,30,31,30,31,31,30,31,30,31};//润
void check(int a,int b ,int c) {
if(b>12||c>31||c<=0||b<=0)return;
//年份加前导数字
if(a>=60)a=Integer.parseInt("19"+a);
else
if(a>10)a=Integer.parseInt("20"+a);
else a=Integer.parseInt("200"+a);
if(a%400 == 0 || a%4 == 0 && a%100 != 0) {//润年
if(c>d[b])return;
String b1=""+b;
String c1=""+c;
if(b<10)b1='0'+b1;//加前导0
if(c<10)c1='0'+c1;
set.add(a+"-"+b1+"-"+c1);
}else {
if(c>f[b])return;
String b1=""+b;
String c1=""+c;
if(b<10)b1='0'+b1;//加前导0
if(c<10)c1='0'+c1;
set.add(a+"-"+b1+"-"+c1);
}
}
}
分析:根据题意给定一个日期他可能有三种错的情况,所以只需要判断纠正后的三种情况都是正确的日期;
1.1960.1.1-2059.12.31:也就是表示年的两位数只能加前导19和20,加19时,该二位数不惜大于等于60,加20时,该二位数必须小于等于59;
2.给定的三个两位数都是[0,9]组成,那么当月和日小于等于0和大于当年(润平年)的该月的最大天数时,该日期也是不对的;
3.题目求的有多少种“不同的”日期可能,当年月日相同时看为一种;
4.多个日期按照从大到小排序,可以使用TreeSet,排序和去重