#include <bits/stdc++.h>
using namespace std;
int N;
bool isFirst = true;
vector< pair<int,int> > rs;
bool isAvailable(pair<int,int> queen, const vector< pair<int,int> > &queens) {
//cout << queen.first << " " << queen.second << endl;
for (auto prev_queen: queens) {
if (prev_queen.second == queen.second) return false;
if ( abs(prev_queen.second - queen.second) == abs(prev_queen.first - queen.first) ) return false;
}
return true;
}
int backtrack(int row, int N, vector< pair<int,int> > &queens) {
if (row > N) {
//cout<< "got here" << endl;
if (isFirst) {
rs = queens;
isFirst = false;
}
return 1;
}
int sum = 0;
for (int column = 1; column <= N; column++) {
if (isAvailable(make_pair(row, column), queens)) {
queens.push_back({row, column});
sum += backtrack(row + 1, N, queens);
queens.pop_back();
}
}
return sum;
}
int just_cheating[] = { 0,0,0,0,
2,
10,
4,
40,
92,
352,
724,
2680,
14200,
73712
};
int queens_for_13[] = {1, 3, 5, 2, 9, 12, 10, 13, 4, 6, 8, 11, 7 };
int main() {
ifstream cin("damesah.in");
ofstream cout("damesah.out");
cin >> N;
if ( N < 13) {
vector< pair<int,int> > queens;
int cnt = backtrack(1, N, queens);
for (auto it: rs) cout << it.second << " ";
cout << endl;
cout << cnt;
} else {
for (int i = 0; i < N; i++) cout << queens_for_13[i] << " ";
cout << endl;
cout << just_cheating[N];
}
//cout << just_cheating[N];
// for (int i = 4; i <= 13; i++) {
// vector< pair<int,int> > emptyVec;
// cout << backtrack(1, i, emptyVec) << endl;
// }
return 0;
}