#include <stdio.h>

#define MAX_FELD_GROESSE 10

int feldgroesse,spaltenmaske; 
long anzahl;

setze_dame(feld,reihe,maske) 
 register int *feld,reihe,maske; 
 {int spalte,lokalfeld[MAX_FELD_GROESSE]; 
  register int k,links,rechts,*feldp,*lokalp; 
   
  for(spalte=1;spalte<=spaltenmaske;spalte<<=1) 
	{ if((maske&spalte)==0) 
		{ feldp=feld+reihe; 
		  if((*feldp&spalte)==0) 
			{ if(reihe>=feldgroesse-1) anzahl++; 
			  else 
				{lokalp=lokalfeld+reihe; 
				 links=rechts=spalte; 
				 for(k=reihe;k<feldgroesse-1;k++) 
				  { links>>=1; 
					 rechts<<=1; 
					 *(++lokalp)=(*(++feldp)| 
						  links|rechts)&spaltenmaske; 
				  } 
				 if(lokalfeld[reihe+1]!=spaltenmaske) 
				  setze_dame(lokalfeld,reihe+1, 
								 maske|spalte); 
				} 
			} 
		 } 
	 } 
  } 
   
main() 
{ int i,feld[MAX_FELD_GROESSE];

  spaltenmaske=0; 
  for(feldgroesse=1;feldgroesse<= 
		MAX_FELD_GROESSE;feldgroesse++) 
	{for(i=0;i<feldgroesse;i++)feld[i]=0; 
	 anzahl=0L; 
	 spaltenmaske=(spaltenmaske<<1)+1; 
	 /*timerfunktion*/ 
	 setze_dame(feld,0,0); 
	  
	 printf("Feldgr%3d %6ld Loesungen\n",feldgroesse, 
				anzahl); 
	 /*getchar();*/ 
	} 
}	   
                                                                                  