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

//ITP1_7_D
//????????????  25???

using System;
using System.Collections.Generic;

class ITP1_7_D
{
    static void Main(string[] args)
    {

        long ans;

        int[] st = Array.ConvertAll<string, int>((Console.ReadLine().Split(' ')), delegate (string value)
        {
            return int.Parse(value);
        });

        int n = st[0];
        int m = st[1];
        int l = st[2];

        long[,] A = new long[n, m];
        long[,] B = new long[m, l];
//        int[,] C = new int[n, l];


        for (int row = 0; row < n; row++)
        {

            int[] cdata = Array.ConvertAll<string, int>((Console.ReadLine().Split(' ')), delegate (string value)
            {
                return int.Parse(value);
            });

            for (int col = 0; col < m; col++)
            {
                A[row, col] = cdata[col];
            }

        }

        for (int row = 0; row < m; row++)
        {

            int[] cdata = Array.ConvertAll<string, int>((Console.ReadLine().Split(' ')), delegate (string value)
            {
                return int.Parse(value);
            });

            for (int col = 0; col < l; col++)
            {
                B[row, col] = cdata[col];
            }

        }

        for (int row = 0; row < n; row++)
        {
            for (int col = 0; col < l; col++)
            {
                ans = 0;
                for (int k = 0; k < m; k++)
                {
                    ans += (A[row, k] * B[k, col]);
                }

                Console.Write(ans);
                if (col < l - 1)
                    Console.Write(" ");
            }

            Console.Write("\r\n");

        }

    }

}