fun readInt () = valOf (TextIO.scanStream (Int.scan StringCvt.DEC) TextIO.stdIn) fun intString n = if 0 <= n then Int.toString n else "-" ^ Int.toString (abs n) fun findAns a_s = let fun findAnsAux [] = [] | findAnsAux [_] = [] | findAnsAux [_, _] = [] | findAnsAux [a1, a2, a3] = [a1, a2, a3] | findAnsAux (a1 :: a2 :: a3 :: tl) = findAnsAux (a2 :: (a3 - (~a1)) :: tl) fun dropZero [] = [] | dropZero (h::tl) = if h = 0 then dropZero tl else (h::tl) val tempAns = findAnsAux (List.rev a_s) val ans = List.rev (dropZero tempAns) in ans end fun ansString [] = "" | ansString [e] = intString e | ansString (h::tl) = (intString h) ^ " " ^ ansString tl val () = let val d = readInt () val a_s = List.tabulate (d + 1, fn _ => readInt ()) val ans = findAns a_s in ( if ans = [] then ( print "0\n"; print "0\n" ) else ( print (Int.toString (List.length ans - 1) ^ "\n"); print (ansString ans ^ "\n") ) ) end