代码如下
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, cnt=0;
vector<int> ans[4];
void dfs(int n,int row,int col,int ld,int rd,vector<int> s){
if(row>=n) {
if(cnt<3) ans[cnt]=s;
cnt++;
return;
}
int b=~(col|ld|rd)&((1<<n)-1);
while(b>0){
int pick=b&-b;
s.push_back(log(pick)/log(2)+1);
dfs(n,row+1,col|pick,(ld|pick)<<1,(rd|pick)>>1,s);
s.pop_back();
b&=b-1;
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n;
dfs(n,0,0,0,0,{});
for(int i=0;i<3;i++){
for(int j=0;j<n;j++){
cout<<ans[i][j]<<" ";
}
cout<<endl;
}
cout<<cnt;
return 0;
}