// 8 queen problem 

// Q = 8,          size of Q x Q board
// Z = Q+1 = 9     empty
// D = Q+Q-1 = 15  size of diagonal

Q, Z, D, soln;
col[8], d45[15], d135[15], queen[8];
//col[Q], d45[D], d135[D], queen[Q];

printboard() {
  i = 0;
  while( i<Q ){
    j = 0;
    while( j<Q ){
      if(j == queen[i]) print("Q"); else print("-");
      j = j + 1;
    }
    print("\n");
    i = i + 1;
  }
  i = 0;
  while( i<Q ){
    print(queen[i]," ");
    i = i + 1;
  }
  print("\n");
}

find(level){
  if ( level == Q ) {
//     printboard();
     soln = soln + 1;
  } else {
    i = 0;
    while( i<Q ){
      if( (col[i] >= level) &&
	  (d45[level+i] >= level) &&
	  (d135[level + Q -1 - i] >= level) ) {
	queen[level] = i;
	col[i] = level;
        d45[level+i] = level;
        d135[level + Q -1 - i] = level;
	find(level+1);
	col[i] = Z;
        d45[level+i] = Z;
        d135[level + Q -1 - i] = Z;
      }
      i = i + 1;
    }
  }
}

main() {
  Q = 8;
  D = 15;
  Z = 9;
  i = 0;
  while( i<Q ) {
    col[i] = Z;
    i = i + 1;
  }
  i = 0;
  while( i<D ) {
    d45[i] = Z;
    d135[i] = Z;
    i = i + 1;
  }
  soln = 0;
  find(0);
  print("num of soln ",soln,"\n");
}
