#include <stdio.h>
void hap(int a,int b, int ary[5][5], int ary2[5][5], int ary3[5][5]){
 int i, j;
 for(i=0;i<a;i++){
  for(j=0;j<b;j++){
   ary3[i][j]=ary[i][j]+ary2[i][j];
  }
 }
}
void cha(int a, int b, int ary[5][5], int ary2[5][5], int ary3[5][5]){
 int i, j;
 for(i=0;i<a;i++){
  for(j=0;j<b;j++){
   ary3[i][j]=ary[i][j]-ary2[i][j];
  }
 }
}
void gop(int a, int b, int ary[5][5], int ary2[5][5], int ary3[5][5]){
 int i, j,k,sum;
 for(i=0;i<a;i++){
  for(j=0;j<a;j++){
   sum = 0;
   for(k= 0;k<b;k++){
    sum += ary[i][k]*ary2[k][j];
   }
  ary3[i][j]=sum;
  }
  
 }
}
void jun(int a, int b, int ary[][5],int ary3[][5]){
 int i, j; 
 for(i=0;i<a;i++){
  for(j=0;j<b;j++){
   ary3[i][j]=ary[j][i];
  }
 }

}
int main(){
 int ary[5][5],ary2[5][5],ary3[5][5];
 int a,b,c,d,i,j;
 printf("행렬의 크기를 입력하세요 \n입력 예시 : 2 2\n");
 scanf("%d %d",&a,&b);
 printf("행렬을 입력하세요\n");
 for(i=0;i<a;i++){
  for(j=0;j<b;j++){
   scanf("%d",&ary[i][j]);
  }
 }
 printf("다음 행렬의 크기를 입력하세요 \n입력 예시 : 2 2\n");
 scanf("%d %d",&c,&d);
 printf("행렬을 입력하세요\n");
 for(i=0;i<c;i++){
  for(j=0;j<d;j++){
   scanf("%d",&ary2[i][j]);
  }
 }
 if(a!=c||b!=d){
  if(b!=c)printf("아무것도 구할 수가없습니다.\n");
 }
 if(a==c&&b==d){
  hap(a,b,ary,ary2,ary3);
  printf("이 두 행렬의 덧셈은\n");
  for(i=0;i<a;i++){
   for(j=0;j<a;j++){
    printf("%d ",ary3[i][j]);
   }
   printf("\n");
  }
  cha(a,b,ary,ary2,ary3);
   printf("이 두 행렬의 뺄셈은\n");
  for(i=0;i<a;i++){
   for(j=0;j<a;j++){
    printf("%d ",ary3[i][j]);
   }
   printf("\n");
  }
  jun(a,b,ary,ary3);
  printf("첫번째 전치행렬은\n");
  for(i=0;i<a;i++){
   for(j=0;j<a;j++){
    printf("%d ",ary3[i][j]);
   }
   printf("\n");
  }
   jun(a,b,ary2,ary3);
  printf("두번째 전치행렬은\n");
  for(i=0;i<a;i++){
   for(j=0;j<a;j++){
    printf("%d ",ary3[i][j]);
   }
   printf("\n");
 }
  }
 if(b==c){
 gop(a,b,ary,ary2,ary3);
  printf("이 두 행렬의 곱셈은\n");
 for(i=0;i<a;i++){
  for(j=0;j<a;j++){
   printf("%d ",ary3[i][j]);
  }
  printf("\n");
 }
 }
}