//
macdef sing = stream_make_sing
macdef intrange = list0_make_intrange
//
fun qsolve(nsol: Nat): void =
(((fix qsolve(n: int): stream(list0(int)) => if(n > 0)then((qsolve(n-1)*intrange(0,N)).map(TYPE{list0(int)})(lam($tup(xs,x))=>cons0(x,xs))).filter()(lam(xs)=>let val-cons0(x0,xs) = xs in xs.iforall()(lam(i, x)=>((x0)!=x)&&(abs(x0-x)!=i+1)) end)else(sing(nil0())))(N)).takeLte(nsol)).iforeach()(lam(i,xs)=>(gprintln!("Solution#", i+1, ":"); xs.rforeach()(lam(x) => ((N).foreach()(lam(i)=>(gprint_string(ifval(i=x," Q", "."))));gprintln!()));gprintln!()))
//