import java.io.*;
class Queen8{
static int QueenMax =0;
static int oktimes = 0;
static int chess[];
public static void main(String args[]) throws Exception{
BufferedReader inp = new BufferedReader(new InputStreamReader(System.in));
String str="";
while (str != null){
System.out.print(">");
str=inp.readLine();
if (str.equalsIgnoreCase("quit")||str.equalsIgnoreCase("q"))break;
try{
QueenMax = Integer.parseInt(str);
}catch(NumberFormatException e){
System.out.println("warning!!! "+str+" is not a number !!!");
continue;
}
chess = new int[QueenMax];
for (int i=0;i<QueenMax;i++)chess[i]=-1;
placequeen(0);
System.out.println("/n/n/nFoe Q 8 there are "+oktimes+" solutions ");
}
}
public static void placequeen(int num){
int i=0;
boolean qsave[] = new boolean[QueenMax];
for(;i<QueenMax;i++) qsave[i]=true;
i=0;
while (i<num){
qsave[chess[i]]=false;
int k=num-i;
if ( (chess[i]+k >= 0) && (chess[i]+k < QueenMax) )
{qsave[chess[i]+k]=false;}
if ( (chess[i]-k >= 0) && (chess[i]-k < QueenMax) )
{qsave[chess[i]-k]=false;}
i++;
}
for(i=0;i<QueenMax;i++){
if (qsave[i]==false)continue;
if (num<QueenMax-1){
chess[num]=i;
placequeen(num+1);
}
else{ //num is last one
chess[num]=i;
oktimes++;
System.out.println("NO "+oktimes+" solution is as following :");
System.out.print(" n : ");
for(int j=0;j<QueenMax;j++){
System.out.print(j+1+" ");
}
System.out.print("/n");
output(chess);
}//end else
}//end for
//???????
}//end method
/*
* 输出某种情况下皇后的坐标
*
*/
public static void output ( int[] data ) {
for (int i=0;i<QueenMax;i++){
String row="No "+(i+1)+" row: ";
for (int j=0;j<data[i];j++) row += "--";
row+="++";
for (int j=data[i];j<QueenMax-1;j++) row += "--";
System.out.println(row);
}
System.out.println ();
}
}
class Queen8{
static int QueenMax =0;
static int oktimes = 0;
static int chess[];
public static void main(String args[]) throws Exception{
BufferedReader inp = new BufferedReader(new InputStreamReader(System.in));
String str="";
while (str != null){
System.out.print(">");
str=inp.readLine();
if (str.equalsIgnoreCase("quit")||str.equalsIgnoreCase("q"))break;
try{
QueenMax = Integer.parseInt(str);
}catch(NumberFormatException e){
System.out.println("warning!!! "+str+" is not a number !!!");
continue;
}
chess = new int[QueenMax];
for (int i=0;i<QueenMax;i++)chess[i]=-1;
placequeen(0);
System.out.println("/n/n/nFoe Q 8 there are "+oktimes+" solutions ");
}
}
public static void placequeen(int num){
int i=0;
boolean qsave[] = new boolean[QueenMax];
for(;i<QueenMax;i++) qsave[i]=true;
i=0;
while (i<num){
qsave[chess[i]]=false;
int k=num-i;
if ( (chess[i]+k >= 0) && (chess[i]+k < QueenMax) )
{qsave[chess[i]+k]=false;}
if ( (chess[i]-k >= 0) && (chess[i]-k < QueenMax) )
{qsave[chess[i]-k]=false;}
i++;
}
for(i=0;i<QueenMax;i++){
if (qsave[i]==false)continue;
if (num<QueenMax-1){
chess[num]=i;
placequeen(num+1);
}
else{ //num is last one
chess[num]=i;
oktimes++;
System.out.println("NO "+oktimes+" solution is as following :");
System.out.print(" n : ");
for(int j=0;j<QueenMax;j++){
System.out.print(j+1+" ");
}
System.out.print("/n");
output(chess);
}//end else
}//end for
//???????
}//end method
/*
* 输出某种情况下皇后的坐标
*
*/
public static void output ( int[] data ) {
for (int i=0;i<QueenMax;i++){
String row="No "+(i+1)+" row: ";
for (int j=0;j<data[i];j++) row += "--";
row+="++";
for (int j=data[i];j<QueenMax-1;j++) row += "--";
System.out.println(row);
}
System.out.println ();
}
}