TYPE Date=[ INT year BYTE month BYTE day] BYTE FUNC IsLeapYear(INT y) IF y MOD 100=0 THEN IF y MOD 400=0 THEN RETURN (1) ELSE RETURN (0) FI FI IF y MOD 4=0 THEN RETURN (1) FI RETURN (0) BYTE FUNC GetMaxDay(INT y BYTE m) BYTE ARRAY MaxDay=[31 28 31 30 31 30 31 31 30 31 30 31] IF m=2 AND IsLeapYear(y)=1 THEN RETURN (29) FI RETURN (MaxDay(m-1)) PROC NextDay(Date POINTER d) BYTE maxD d.day==+1 maxD=GetMaxDay(d.year,d.month) IF d.day>maxD THEN d.day=1 d.month==+1 IF d.month>12 THEN d.month=1 d.year==+1 FI FI RETURN BYTE FUNC IsPalindrome(Date POINTER d) INT y y=d.year IF y/1000#d.day MOD 10 THEN RETURN (0) FI y==MOD 1000 IF y/100#d.day/10 THEN RETURN (0) FI y==MOD 100 IF y/10#d.month MOD 10 THEN RETURN (0) FI y==MOD 10 IF y#d.month/10 THEN RETURN (0) FI RETURN (1) PROC PrintB2(BYTE x) IF x<10 THEN Put('0) FI PrintB(x) RETURN PROC PrintDateShort(Date POINTER d) PrintI(d.year) Put('-) PrintB2(d.month) Put('-) PrintB2(d.day) RETURN PROC Main() BYTE count Date d count=0 d.year=2020 d.month=2 d.day=3 WHILE count<15 DO IF IsPalindrome(d) THEN PrintDateShort(d) PutE() count==+1 FI NextDay(d) OD RETURN