#include <stdio.h>
int maxi=0;

inline int 
det(int a[]) {
  int d =a[0]*a[4]*a[8]+a[1]*a[5]*a[6]+a[2]*a[3]*a[7]-a[2]*a[6]*a[4]-a[0]*a[5]*a[7]-a[1]*a[3]*a[8];
  return d;
}
void affiche(int mt[]) {
  int i;
  printf("\n");
  for(i=0;i<9;i++) {
    printf("%d ",mt[i]);
    if((i+1)%3==0) printf("\n");
  }
  printf("---------------\n");
}

inline void 
  matr(int mt[], int k) {
  int m[9], i, j, d;
  if(k==9) {
    d=det(mt);
    if(d>maxi) {
       maxi=d;
       printf("%d\n",d);
       affiche(mt);
    }
  } else {    
    for(i=0;i<k;i++)
      m[i]=mt[i];
    for(j=k;j<9;j++) {
      for(i=k;i<9;i++) 
	m[i]=mt[i];	    
      m[j]=mt[k];
      m[k]=mt[j];
      matr(m,k+1);
    }
  }
}

int main() {
 int i, j, k, d, m[9];
 for(i=0;i<9;i++) m[i]=i+1;
 matr(m,0);
 return 0;
}
