/*
                 1
              6     2
          11     7     3                11 24  7 20  3
       16    12     8     4              4 12 25  8 16
    21    17    13     9     5   -->    17  5 13 21  9
       22    18    14    10             10 18  1 14 22
          23    19    15                23  6 19  2 15
             24    20
                25
*/

class MagicSquare {

    public static final int dim = 3;  /* Dimension of matrix */
    public static double[][] a = new double[dim][dim];
    public static double[][] res = new double[dim][dim];
    public static int iter;

    public static void main (String args[]) {
        for (int ipr = 0; ipr < 5; ipr++) {
            long start = System.currentTimeMillis();
            iter = 100000;

            res = test(a);

            long end = System.currentTimeMillis();
            System.out.println("Total time = "+ (end-start)*0.001);

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


    public static double[][] test(double[][] a) {
        double[][] magic = new double[dim][dim];
        double[] rr = new double[dim];
        double[] rr1 = new double[dim];
        
        int x = (dim - 1)/2 + (dim + 1);
        int y = -(dim - 1)/2 + (dim - 1);

        double summa = dim * (dim*dim + 1) /2;
        int n = 1;
        
        for (int i = 0; i < dim; i++) {
            x = x - (dim + 1);
            y = y - (dim - 1);
            for (int j = 0; j < dim; j++) {
                if (x >= dim) magic[x-dim][y] = n/summa;
                  else if (x <  0  ) magic[x+dim][y] = n/summa;
                    else if (y >= dim) magic[x][y-dim] = n/summa;
                      else if (y <  0  ) magic[x][y+dim] = n/summa;
                        else magic[x][y] = n/summa;
                n++;
                x++;
                y++;
            }
        }

        for (int i = 0; i < dim; i++) {
            for (int k = 0; k < dim; k++) rr[k] = magic[i][k];
            for (int iiii = 0; iiii < iter; iiii++) {
                for (int j = 0; j < dim; j++) {
                    rr1[j] = 0.0;
                    for (int k = 0; k < dim; k++) {
                        rr1[j] = rr1[j] + rr[k]*magic[k][j];
                    }
                }
                for (int k = 0; k < dim; k++) rr[k] = rr1[k];
            }
            for (int k = 0; k < dim; k++) res[i][k] = rr[k];
        }
        return res;    
    }
}