using namespace std;
struct date {
int y, m, d;
date(int y, int m, int d) : y(y), m(m), d(d) {
}
};
bool cmp(date a, date b) {
if (a.y != b.y) return a.y < b.y;
if (a.m != b.m) return a.m < b.m;
if (a.d != b.d) return a.d < b.d;
}
vector dates;
int m_days[13] = {0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool isRunNian(int y) {
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) {
return true;
}
return false;
}
void check(int y, int m, int d) {
if (y > 59) {
y += 1900;
} else {
y += 2000;
}
if (m < 1 || m > 12 || d < 1 || d > 31) {
return;
}
if (isRunNian(y)) {
m_days[2] = 29;
} else {
m_days[2] = 28;
}
if (d > m_days[m]) {
return;
}
dates.push_back(date(y, m, d));
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int x, y, z;
scanf("%d/%d/%d", &x, &y, &z);
check(x, y, z);
check(z, x, y);
check(z, y, x);
sort(dates.begin(), dates.end(), cmp);
for (int i = 0; i < dates.size(); ++i) {
if (i > 0 && (dates[i].y == dates[i - 1].y && dates[i].m == dates[i - 1].m && dates[i].d == dates[i - 1].d)) {
continue;
}
printf("%02d-%02d-%02d\n", dates[i].y, dates[i].m, dates[i].d);
}
return 0;
}
```