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 Scala (judge verdict: Accepted)

object Main extends App {
	override def main(args: Array[String]){
		val sc = new java.util.Scanner(System.in)
		
		val n = sc.nextInt
		val m = sc.nextInt
		val l = sc.nextInt
		
		val m1 = new Matrix(n,m);
		for(i <- (0 until n) ; j <- (0 until m)){
			m1(i,j) = sc.nextInt
		}

		val m2 = new Matrix(m,l);
		for(i <- (0 until m) ; j <- (0 until l)){
			m2(i,j) = sc.nextInt
		}
		
		val res = m1.product(m2)
		
		for(i <- (0 until n); j<- (0 until l)){
			print(res(i,j))
			j match{
				case x:Int if x == l-1 => println
				case _ => print(" ")
			}
		}
		
	}
	
}

class Matrix(val h: Int , val w :Int){
	val matrix = Array.ofDim[Long](h,w)
	
	def update(i:Int , j:Int , newValue:Long):Unit = {
		matrix(i)(j) = newValue
	}
	def apply(i:Int,j:Int): Long = matrix(i)(j)
	
	def product(right:Matrix):Matrix = {
		val ret = new Matrix(h , right.w)
		for(i <- (0 until h) ; j <- (0 until w) ; k <- (0 until right.w)){
			ret(i,k) = ret(i,k) + apply(i,j) * right(j,k)
		}
		
		ret
	}
}