import java.io.*;
class Multip implements Runnable{
public Thread yuan=null;
public int[] c=null;
int[] a=null;
int[][] b=null;
public Multip(int a[],int[][] b){
yuan=new Thread(this);
this.a=a;
this.b=b;
c=new int[b[0].length];
yuan.start(); }
public void run(){
multi(a,b); } void multi(int a[],int b[][]){
for(int i=0;i<c.length;i++){
c[i]=0;
for(int j=0;j<b.length;j++)
c[i]+=a[j]*b[j][i];
}
}
}public class MatrixMulti{

public static int[][] multiply(int[][] a,int[][] b){
int[][] result=new int[a.length][b[0].length];
Multip line[]=new Multip[a.length];
for(int i=0;i<line.length;i++)
line[i]=new Multip(a[i],b);
for(int i=0;i<line.length;i++)
line[i].yuan.yield();
for(int i=0;i<line.length;i++)
result[i]=line[i].c;
return result;
}
public static void main(String args[]){
int m=10;
int n=5;
int k=7; int[][] a=new int[m][n];
int[][] b=new int[n][k];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
a[i][j]=j+1;

for(int i=0;i<n;i++)
for(int j=0;j<k;j++)
b[i][j]=j+2;

System.out.println("A("+m+","+n+"):");
for(int i=0;i<m;i++){
for(int j=0;j<n;j++)
System.out.print(a[i][j]+" ");
System.out.println(); }
System.out.println("B("+n+","+k+"):");
for(int i=0;i<n;i++){
for(int j=0;j<k;j++)
System.out.print(b[i][j]+" ");
System.out.println(); }

System.out.println("A*B("+m+","+k+"):");
int[][] ab=multiply(a,b);
for(int i=0;i<m;i++){
for(int j=0;j<k;j++)
System.out.print(ab[i][j]+" ");
System.out.println(); }
}
}