fun readInt () = valOf (TextIO.scanStream (Int.scan StringCvt.DEC) TextIO.stdIn) fun readLargeInt () = valOf (TextIO.scanStream (LargeInt.scan StringCvt.DEC) TextIO.stdIn) fun readStr () = let fun scan reader stream = SOME (StringCvt.splitl (not o Char.isSpace) reader (StringCvt.skipWS reader stream)) in valOf (TextIO.scanStream scan TextIO.stdIn) end exception BadInput fun printAnsAux _ _ [] = [] | printAnsAux "+" a (b :: bt) = LargeInt.toString (a + b) :: printAnsAux "+" a bt | printAnsAux "*" a (b :: bt) = LargeInt.toString (a * b) :: printAnsAux "*" a bt | printAnsAux _ _ _ = raise BadInput fun printAns _ [] _ = ignore () | printAns operation (a :: at) b_s = ( print ((String.concatWith " " (printAnsAux operation a b_s)) ^ "\n"); printAns operation at b_s ) val () = let val n = readInt () val m = readInt () val operation = readStr () val b_s = List.tabulate (m, fn _ => readLargeInt ()) val a_s = List.tabulate (n, fn _ => readLargeInt ()) in printAns operation a_s b_s end