#include <stdio.h>
#include <stdlib.h>
#include <mpc.h>

void init_matrix(int n, double (*a)[n][n]) {
  int i,j;

  for(i=0;i<n;i++)
    for(j=0;j<n;j++)
      (*a)[i][j]=10.;
  for(i=0;i<n;i++)
    (*a)[i][i]=10.*n;
}

void print_matrix(int n, double (*a)[n][n]) {
 int i,j;

  for(i=0;i<n;i++) {
    for(j=0;j<n;j++)
      printf("%lf\t",(*a)[i][j]);
  printf("\n");
  }
}

int [*]main(int [host]argc, char *[host]argv[]){
  [host]:
    {
      int n, i, j;
      n = atoi(argv[1]);
      if(n<=0)
        printf("Wrong input: n = %d\n", n);  
      else {
        double a[n][n];
        init_matrix(n,&a);
        printf("\n Source matrix :\n");
        print_matrix(n,&a);
        for(i=0; i<n-1; i++) {
          for(j=i+1; j<n; j++) {
            double t;
            t = a[j][i] / a[i][i];
            if(a[j][i]!=0)
              a[j][i:n-1] -= t * a[i][i:n-1];
          }
        }
        printf("\n Matrix after LU transformation: \n");
        print_matrix(n,&a);
      }
    }
}