Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Matrix Multiplication

Write a program which reads a $n \times m$ matrix $A$ and a $m \times l$ matrix $B$, and prints their product, a $n \times l$ matrix $C$. An element of matrix $C$ is obtained by the following formula:

\[
c_{ij} = \sum_{k=1}^m a_{ik}b_{kj}
\]

where $a_{ij}$, $b_{ij}$ and $c_{ij}$ are elements of $A$, $B$ and $C$ respectively.

Input

In the first line, three integers $n$, $m$ and $l$ are given separated by space characters

In the following lines, the $n \times m$ matrix $A$ and the $m \times l$ matrix $B$ are given.

Output

Print elements of the $n \times l$ matrix $C$ ($c_{ij}$). Print a single space character between adjacent elements.

Constraints

$1 \leq n, m, l \leq 100$

$0 \leq a_{ij}, b_{ij} \leq 10000$

Sample Input

3 2 3
1 2
0 3
4 5
1 2 1
0 3 2

Sample Output

1 8 5
0 9 6
4 23 14

Note

      解説

Solution in Haskell (judge verdict: Accepted)

import Control.Applicative
import Control.Monad

solve :: Int -> Int -> Int -> [[Int]] -> [[Int]] -> [[Int]]
solve n m l matrix1 matrix2 = map (\r -> map (\c -> element r c) [0 .. l - 1]) [0 .. n - 1]
    where
        element r c = foldl (\a (x, y) -> a + x * y) 0 $ zip (row r) (column c)
        row r       = matrix1 !! r
        column c    = map (\r -> matrix2 !! r !! c) [0 .. m - 1]

main :: IO ()
main = do
    [n, m, l] <- map read . words <$> getLine
    matrix1   <- map (map read . words) <$> replicateM n getLine
    matrix2   <- map (map read . words) <$> replicateM m getLine
    putStr $ unlines $ map (unwords . map show) $ solve n m l matrix1 matrix2