A.
void backtrack(int t) { if (t>n) output(x); else for( int i=t;i<=n; i++){ swap( x[t], x[i]); if (legal(t)) backtrack(t+1); swap( x[i], x[t]); } }
B.
void backtrack(int t) { if (t>n) output(x); else for( int i=0;i<=1; i++){ x[i]=i; if (legal(t)) backtrack(t+1); } }
C.
void backtrack(int t) { if (t>n) output(x); else for( int i=0;i<=1; i++){ x[i]=i; if (legal(t)) backtrack(t-1); } }
D.
void backtrack(int t) { if (t>n) output(x); else for( int i=t;i<=n; i++){ swap( x[t], x[i]); if (legal(t)) backtrack(t+1); } }