// Programa para la Suma y Multiplicacion de Matrices Cuadradas

import java.lang.*;
import java.io.*;

class Matriz {
  int Vals[][];
  int N;
  
  Matriz(int N) {
    this.N=N;
    Vals=new int[N][N];
    }

  int LeeInt() {
    DataInputStream entrada=new DataInputStream(System.in);
    for(;;) 
      try { return new Integer(entrada.readLine()).intValue(); } 
        catch (Exception e) {}
    }

  void Intro() {
    int i, j;

    for ( i = 0; i < N; i++ )
      for ( j = 0; j < N; j++ ) 
        Vals[i][j]=LeeInt();
    }

  void Escri() {
   int i, j;

   for ( i = 0; i < N; i++ ) {
      for ( j = 0; j < N; j++ )
         System.out.print(Vals[i][j]+" ");
      System.out.println("");
      }
   }

  Matriz Multi (Matriz Y) {
   int i, j, k;
   Matriz Z=new Matriz(N);
 
   for ( i = 0; i < N; i++ ) 
     for ( j = 0; j < N; j++ ) {
       Z. Vals [i][j] = 0;
       for ( k = 0; k < N; k++ ) 
         Z.Vals[i][j] = Z.Vals[i][j] + Vals[i][k] * Y.Vals[k][j];
       }

   return Z;
   }

  Matriz Suma (Matriz Y) {
    int i, j;
    Matriz Z=new Matriz(N);

    for ( i = 0; i < N; i++ )
      for ( j = 0; j < N; j++ )
        Z.Vals[i][j] = Vals[i][j] + Y.Vals[i][j];

    return Z;
    }

  public static void main(String arg[]) throws IOException {
    char    opcion;
    boolean matrizIn=false;
    Matriz  A=new Matriz(3);
    Matriz  B=new Matriz(3);

    do {
      System.out.print(
        "\n\n 1 - Introducir Matrices\n" +
        " 2 - Sumar Matrices\n" +
        " 3 - Multiplicar Matrices\n" +
        " 4 - Salir\n" +
        "Introduce Opcion:");

      do {
        opcion = (char)System.in.read();
      } while ( ( opcion < '1' ) || ( opcion > '4' ) );

      switch ( opcion ) {
        case '1': System.out.println("\nIntroduce Matriz A");
                  A.Intro();
                  System.out.println("\nIntroduce Matriz B");
                  B.Intro();
                  matrizIn=true;
                  break;
        case '2': if (!matrizIn)
                    System.out.println("Introduzca primero las matrices");
                  else
                    A.Suma(B).Escri();
                  break;
        case '3': if (!matrizIn)
                     System.out.println("Introduzca primero las matrices");
                  else
                    A.Multi(B).Escri();
                  break;
        case '4': System.out.println("Fin del programa");
        }

    } while ( opcion != '4' );
  }
}

