#include <stdio.h>
#include <time.h>
time_t testDatum(const char*d)
{
struct tm t={0};
unsigned a,b,c;
int n;
if( 3!=sscanf(d
,"%u.%u.%4u%n",&a
,&b
,&c
,&n
) || d
[n
]) return -1; t.tm_year = c-1900;
t.tm_mon = b-1;
t.tm_mday = a;
return mktime(&t
)!=(time_t
)-1?t.
tm_year==c
-1900&&t.
tm_mon==b
-1&&t.
tm_mday==a
?mktime(&t
):-1:-1; }
int main(void) {
time_t t;
puts((t
=testDatum
("1.1.1970"))==(time_t
)-1?"?":ctime(&t
)); puts((t
=testDatum
("29.2.2016"))==(time_t
)-1?"?":ctime(&t
)); puts((t
=testDatum
("29.2.2015"))==(time_t
)-1?"?":ctime(&t
)); puts((t
=testDatum
("1.1.1970abc"))==(time_t
)-1?"?":ctime(&t
)); puts((t
=testDatum
("1.1.197"))==(time_t
)-1?"?":ctime(&t
)); puts((t
=testDatum
("31.4.1970"))==(time_t
)-1?"?":ctime(&t
)); puts((t
=testDatum
("31.5.1970"))==(time_t
)-1?"?":ctime(&t
)); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx0aW1lLmg+Cgp0aW1lX3QgdGVzdERhdHVtKGNvbnN0IGNoYXIqZCkKewoJc3RydWN0IHRtIHQ9ezB9OwoJdW5zaWduZWQgYSxiLGM7CglpbnQgbjsKCWlmKCAzIT1zc2NhbmYoZCwiJXUuJXUuJTR1JW4iLCZhLCZiLCZjLCZuKSB8fCBkW25dKSByZXR1cm4gLTE7Cgl0LnRtX3llYXIgPSBjLTE5MDA7Cgl0LnRtX21vbiA9IGItMTsKCXQudG1fbWRheSA9IGE7CglyZXR1cm4gbWt0aW1lKCZ0KSE9KHRpbWVfdCktMT90LnRtX3llYXI9PWMtMTkwMCYmdC50bV9tb249PWItMSYmdC50bV9tZGF5PT1hP21rdGltZSgmdCk6LTE6LTE7Cn0KCmludCBtYWluKHZvaWQpIHsKCXRpbWVfdCB0OwoJcHV0cygodD10ZXN0RGF0dW0oIjEuMS4xOTcwIikpPT0odGltZV90KS0xPyI/IjpjdGltZSgmdCkpOwoJcHV0cygodD10ZXN0RGF0dW0oIjI5LjIuMjAxNiIpKT09KHRpbWVfdCktMT8iPyI6Y3RpbWUoJnQpKTsKCXB1dHMoKHQ9dGVzdERhdHVtKCIyOS4yLjIwMTUiKSk9PSh0aW1lX3QpLTE/Ij8iOmN0aW1lKCZ0KSk7CglwdXRzKCh0PXRlc3REYXR1bSgiMS4xLjE5NzBhYmMiKSk9PSh0aW1lX3QpLTE/Ij8iOmN0aW1lKCZ0KSk7CglwdXRzKCh0PXRlc3REYXR1bSgiMS4xLjE5NyIpKT09KHRpbWVfdCktMT8iPyI6Y3RpbWUoJnQpKTsKCXB1dHMoKHQ9dGVzdERhdHVtKCIzMS40LjE5NzAiKSk9PSh0aW1lX3QpLTE/Ij8iOmN0aW1lKCZ0KSk7CglwdXRzKCh0PXRlc3REYXR1bSgiMzEuNS4xOTcwIikpPT0odGltZV90KS0xPyI/IjpjdGltZSgmdCkpOwoJcmV0dXJuIDA7Cn0K