
<qprint #N>
	<for (#i #N)
		<for (#j #N)
			(<q #j #i> <printf "Q "> | <printf "_ ">)
		>
		<print>
	>
	<print>
	;

<check #x #y>
	<for (#i #y) 
		<q #j #i>
		<compare #j != #x>
		<compare #i-#j != #y-#x>
		<compare #i+#j != #y+#x>
	>
	;


<nqueen #y #N>
	<compare #y >= #N>
	<qprint #N>
	<print>
	;

<nqueen #y #N>
	<#y1 = #y + 1>
	<for (#x #N)
		[
		  <check #x #y>
		  <setArray q #x #y>
		  <nqueen #y1 #N>
		]
	>
	;


? <nqueen 0 8>;

