fun readInt () = valOf (TextIO.scanStream (Int.scan StringCvt.DEC) TextIO.stdIn) val () = let val n = readInt () val ws = Array.tabulate (n, fn _ => readInt ()) val sum = Array.foldl (fn (w, acc) => w + acc) 0 ws val dp = Array.array (n + 1, Array.array ((n + 1) * 100, false)) fun doDp () = (Array.update (Array.sub (dp, 0), 0, true); Array.appi (fn (index, w) => let val i = ref 0 in if index < n then ( while !i < n * 100 do (if Array.sub (Array.sub (dp, index), !i) = true then (Array.update (Array.sub (dp, index + 1), !i + w, true); Array.update (Array.sub (dp, index + 1), !i, true)) else ignore (); i := !i + 1) ) else ignore () end ) ws) in if sum mod 2 <> 0 then print "impossible\n" else ( doDp (); if Array.sub (Array.sub (dp, n), sum div 2) = true then print "possible\n" else print "impossible\n" ) end