#include <allinc.h>
int det(apmatrix <int> &);
void main()
{
	ofstream ouf;
   ouf.open("mine_subtestTXT.xls");

	apmatrix <int> m(3,3);
   apmatrix <int> s(3,3);

   for(int i=0; i<pow(2,9); i++)
   {
   	cout<<i<<endl;
   	//assign i's binary to m
   	int i_=i;
      for(int j=2; j>=0; j--)
      for(int k=2; k>=0; k--)
      {
      	m[j][k]=i_%2;
         s[j][k]=0;
         i_/=2;
      }
      for(int a=0; a<9; a++)
      {
      	int c=m.numcols();
         int r=3;
	   	if(0<=a/c-1 && 0<=a%c-1) s[a/c-1][a%c-1]+=m[a/c][a%c];
		   if(0<=a/c-1            ) s[a/c-1][a%c  ]+=m[a/c][a%c];
		   if(0<=a/c-1 && a%c+1< c) s[a/c-1][a%c+1]+=m[a/c][a%c];
		   if(            0<=a%c-1) s[a/c  ][a%c-1]+=m[a/c][a%c];
		   if(            a%c+1< c) s[a/c  ][a%c+1]+=m[a/c][a%c];
		   if(a/c+1< r && 0<=a%c-1) s[a/c+1][a%c-1]+=m[a/c][a%c];
		   if(a/c+1< r            ) s[a/c+1][a%c  ]+=m[a/c][a%c];
		   if(a/c+1< r && a%c+1< c) s[a/c+1][a%c+1]+=m[a/c][a%c];
      }
      int s_=0;
      for(int j=0; j<3; j++)
      for(int k=0; k<3; k++)
      	s_+=s[j][k]*pow(9,8-(3*j+k));

      for(int j=0; j<3; j++)
      for(int k=0; k<3; k++)
      	ouf<<m[j][k];
      ouf<<'\t';
      for(int j=0; j<3; j++)
      for(int k=0; k<3; k++)
      	ouf<<s[j][k];
      ouf<<'\t'<<i<<'\t'<<s_<<'\t'<<det(m)<<'\t'<<det(s)<<endl;
   }
}
int det(apmatrix <int> &m)
//Use: calculates determinant of given matrix
//Args: matrix to be det'd
//Returns: determinant of m
{
	int left=1, right=1;
   int s=m.numcols();
   for(int i=0; i<s; i++)
   	for(int j=0; j<s; j++)
      	left*=m[i][(i+j)%s];
   for(int i=0; i<s; i++)
   	for(int j=0; j<s; j++)
      	right*=m[i][(i-j+s)%s];
   return left-right;
}
