- import java.io.*;
- class A2 {
- static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
- static Macierz[] macierze=new Macierz[100];
- static boolean[] czyJest=new boolean[100];
- private static class Macierz {
- boolean czyDobra=false;
- int[][] wartosci;
- int n;
- int m;
- Macierz() {}
- Macierz(int n, int m, int [][] wartosci) {
- this.czyDobra=true;
- this.wartosci=new int[n][m];
- this.n=n;
- this.m=m;
- for(int i=0; i<n; i++)
- for(int j=0; j<m; j++)
- this.wartosci[i][j]=wartosci[i][j];
- }
- Macierz(int n, int m) {
- this.czyDobra=true;
- this.wartosci=new int[n][m];
- this.n=n;
- this.m=m;
- for(int j=0; j<n; j++) {
- try {
- String liczby=reader.readLine();
- char[] zuo=liczby.toCharArray();
- int i=0;
- for(int k=0; k<m; k++) {
- int x=0;
- int awb=1;
- if(i<zuo.length && zuo[i]=='-') {awb=-1; i++;}
- while(i<zuo.length && zuo[i]!=' ') {x*=10; x+=(int)zuo[i]-48; i++;}
- i++;
- x*=awb;
- this.wartosci[j][k]=x;
- }
- } catch(IOException e) {}
- }
- }
- public String toString() {
- if(!this.czyDobra) return("UNDEFINE");
- else{
- String wynik="";
- for(int i=0; i<this.n; i++) {
- for(int j=0; j<this.m; j++)
- wynik+=Integer.toString(wartosci[i][j])+" ";
- if(i<this.n-1) wynik+="\n";
- }
- return wynik;
- }
- }
- }
- private static Macierz suma(Macierz A, Macierz B) {
- if(!A.czyDobra) return new Macierz();
- if(!B.czyDobra) return new Macierz();
- if(A.n != B.n || A.m != B.m) return new Macierz();
- else {
- int n=A.n;
- int m=A.m;
- int[][] wartosci = new int[n][m];
- for(int i=0; i<n; i++)
- for(int j=0; j<m; j++)
- wartosci[i][j]=A.wartosci[i][j]+B.wartosci[i][j];
- Macierz wynik=new Macierz(n,m,wartosci);
- return wynik;
- }
- }
- private static Macierz roznica(Macierz A, Macierz B) {
- if(!A.czyDobra) return new Macierz();
- if(!B.czyDobra) return new Macierz();
- if(A.n != B.n || A.m != B.m) return new Macierz();
- else {
- int n=A.n;
- int m=A.m;
- int[][] wartosci = new int[n][m];
- for(int i=0; i<n; i++)
- for(int j=0; j<m; j++)
- wartosci[i][j]=A.wartosci[i][j]-B.wartosci[i][j];
- Macierz wynik=new Macierz(n,m,wartosci);
- return wynik;
- }
- }
- private static Macierz iloczyn(Macierz A, Macierz B) {
- if(!A.czyDobra) return new Macierz();
- if(!B.czyDobra) return new Macierz();
- if(A.m != B.n) return new Macierz();
- else {
- int n=A.n;
- int m=B.m;
- int zuo=A.m;
- int [][] wartosci= new int [n][m];
- for(int i=0; i<n; i++)
- for(int j=0; j<m; j++)
- for(int k=0; k<zuo; k++)
- wartosci[i][j]+=A.wartosci[i][k]*B.wartosci[k][j];
- Macierz wynik= new Macierz(n,m,wartosci);
- return wynik;
- }
- }
- private static Macierz hardkor(Macierz pierwsza, char[] wyrazenie, int i) {
- if(pierwsza.czyDobra) {
- //System.out.println(pierwsza);
- if(i==wyrazenie.length-1) return pierwsza;
- if(wyrazenie[i+1]=='+')
- if(czyJest[(int)wyrazenie[i+2]-65])
- return suma(pierwsza, hardkor(macierze[(int)wyrazenie[i+2]-65], wyrazenie, i+2));
- else return new Macierz();
- if(wyrazenie[i+1]=='-')
- if(czyJest[(int)wyrazenie[i+2]-65])
- return roznica(pierwsza, hardkor(macierze[(int)wyrazenie[i+2]-65], wyrazenie, i+2));
- else return new Macierz();
- else
- if(czyJest[(int)wyrazenie[i+2]-65]) {
- Macierz druga=macierze[(int)wyrazenie[i+2]-65];
- Macierz nowa=iloczyn(pierwsza, druga);
- return hardkor(nowa, wyrazenie, i+2);
- }
- else return new Macierz();
- }
- else return pierwsza;
- }
- public static void main(String[] args) {
- while(true) try{
- String wczytane = reader.readLine();
- char[] polecenie;
- if(wczytane != null) polecenie = wczytane.toCharArray();
- else return;
- if(polecenie[0]=='m') {
- int kodMacierzy=(int)polecenie[7]-65;
- int n=0, m=0;
- int i=9;
- while(i<polecenie.length &&polecenie[i]!=' ') {
- m*=10;
- m+=(int)polecenie[i]-48;
- i++;
- }
- i++;
- while(i<polecenie.length && polecenie[i]!=' ') {
- n*=10;
- n+=(int)polecenie[i]-48;
- i++;
- }
- macierze[kodMacierzy]=new Macierz(n, m);
- czyJest[kodMacierzy]=true;
- }
- if(polecenie[0]=='p') {
- int kodMacierzy=(int)polecenie[6]-65;
- if(czyJest[kodMacierzy]) System.out.println(macierze[kodMacierzy]);
- else System.out.println("UNDEFINE");
- }
- if(polecenie[0]=='c') {
- char[] wyrazenie=new char[polecenie.length-11];
- for(int i=6; i<polecenie.length-5; i++) {
- wyrazenie[i-6]=polecenie[i];
- }
- int kodMacierzy=(int)polecenie[polecenie.length-1]-65;
- //System.out.println(wyrazenie);
- if(czyJest[(int)wyrazenie[0]-65])
- macierze[kodMacierzy]=hardkor(macierze[(int)wyrazenie[0]-65],wyrazenie,0);
- else macierze[kodMacierzy]=new Macierz();
- czyJest[kodMacierzy]=true;
- }
- } catch(IOException e) {return;}
- }
- }
