
 // matrix multiplication 


 N, a[16]; b[16]; c[16]; 

//index(i,j){
//  return i*N + j;
//}

inita() {
  i = 0;
  while( i < N ){
    j = 0;
    while( j < N ){
      a[i*N+j] = i;	// a[i,j]
      j = j + 1;
    }
    i = i + 1;
  }
}

initb() {
  i = 0;
  while( i < N ){
    j = 0;
    while( j < N ){
      b[i*N+j] = j;	// b[i,j]
      j = j + 1;
    }
    i = i + 1;
  }
}

matmul() {
  i = 0;
  while( i < N ){
    j = 0;
    while( j < N ){
      s = 0;
      k = 0;
      while( k < N ){
        s = s + a[i*N+k] * b[k*N+j];	// a[i,k], b[k,j]
        k = k + 1;
      }
      c[i*N+j] = s;		// c[i,j]
      j = j + 1;
    }
    i = i + 1;
  }
}

show() {
  i = 0;
  while( i < N ){
    j = 0;
    while( j < N ){
      print(a[i*N+j], " ");	// a[i,j]
      j = j + 1;
    }
    print("\n");
    i = i + 1;
  }
}  

main() {
  N = 4;
  inita();
  initb();
  matmul();
  show();
}
