import Data.List.Split import Text.Printf is_leap_year :: Int -> Bool is_leap_year yy | yy `mod` 400 == 0 = True | yy `mod` 100 == 0 = False | yy `mod` 4 == 0 = True | otherwise = False is28 :: [Int] -> Bool is28 [yy, mm, dd] | (not $ is_leap_year yy) && mm == 2 = True | otherwise = False is29 :: [Int] -> Bool is29 [yy, mm, dd] | is_leap_year yy && mm == 2 = True | otherwise = False is30 :: [Int] -> Bool is30 [yy, mm, dd] | elem mm [4, 6, 9, 11] = True | otherwise = False is31 :: [Int] -> Bool is31 [yy, mm, dd] | elem mm [1, 3, 5, 7, 8, 10, 12] = True | otherwise = False main :: IO () main = getLine >>= solve solve :: String -> IO () solve s = printf "%d/%02d/%02d" yy mm dd where [y, m, d] = map (read :: String -> Int) $ splitOn "/" s [yy, mm, dd] = g [y, m, d] g :: [Int] -> [Int] g xs@[y,m,d] | d <= 26 = [y, m, d + 2] | is28 xs = if is_leap_year y then [y, m, d + 2] else [y, m + 1, (d + 2) `mod` 28] | is29 xs = if d == 27 then [y, m , d + 2] else [y, m + 1, (d + 2) `mod` 29] | is30 xs = if d <= 28 then [y, m, d + 2] else [y, m + 1, (d + 2) `mod` 30] | is31 xs && m == 12 && d >= 30 = [y + 1, 1, (d + 2) `mod` 31] | otherwise = [y, m + 1, d + 2]