#include <iostream>
#include <math.h>
#include <vector>
using namespace std;
int n;
bool proverka (int i, int j,vector <int> &a) {
if (a.size()!=0) {
int k=a.size();
for (int f=0;f<k;f++) {
if ( i==a[f]/10||j==a[f]%10||i+j==a[f]/10+a[f]%10||i-j==a[f]/10-a[f]%10) {
return 0;}
}
return 1;
}
}
void viviod_vectora (vector <int> a) {
for (int f=0; f<a.size(); f++) {
cout<<a[f]<<' ';}
}
void udalenie (int &d, vector <int> &a) {
for (int i=0;i<d;i++) {
a.pop_back();}
}
void recurs (int n, int j, vector <int> &a, int &d, int &vivod) {
for (int i=1; i<=n; i++) {
cout<<i*10+j<<endl;
if (proverka(i,j,a)) {
a.push_back(i*10+j);
viviod_vectora(a); cout<<endl<<endl;
if (j<n) {
recurs(n,j+1,a,d,vivod);
}
else {
a.pop_back();
}
}
}
if (a.size()==n) {
vivod++;
a.pop_back();
}
}
}
}
int main() {
cin>>n;
int vivod(0);
int d=1;
vector <int> a;
int j(1);
recurs (n,j,a,d,vivod);
cout<<vivod;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWF0aC5oPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgbjsKCgpib29sIHByb3ZlcmthIChpbnQgaSwgaW50IGosdmVjdG9yIDxpbnQ+ICZhKSB7CiAgICBpZiAoYS5zaXplKCkhPTApIHsKICAgIGludCBrPWEuc2l6ZSgpOwogICAgICAgIGZvciAoaW50IGY9MDtmPGs7ZisrKSB7CiAgICAgICAgICAgIGlmICggaT09YVtmXS8xMHx8aj09YVtmXSUxMHx8aStqPT1hW2ZdLzEwK2FbZl0lMTB8fGktaj09YVtmXS8xMC1hW2ZdJTEwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDt9CiAgICAgICAgfQogICAgICAgIHJldHVybiAxOwogICAgfQp9Cgp2b2lkIHZpdmlvZF92ZWN0b3JhICh2ZWN0b3IgPGludD4gYSkgewpmb3IgKGludCBmPTA7IGY8YS5zaXplKCk7IGYrKykgewogICAgICAgICAgICBjb3V0PDxhW2ZdPDwnICc7fQogICAgICAgICAgICB9Cgp2b2lkIHVkYWxlbmllIChpbnQgJmQsIHZlY3RvciA8aW50PiAmYSkgewogICAgZm9yIChpbnQgaT0wO2k8ZDtpKyspIHsKICAgIGEucG9wX2JhY2soKTt9Cn0KCnZvaWQgcmVjdXJzIChpbnQgbiwgaW50IGosIHZlY3RvciA8aW50PiAmYSwgaW50ICZkLCBpbnQgJnZpdm9kKSB7CiAgICBmb3IgKGludCBpPTE7IGk8PW47IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQ8PGkqMTArajw8ZW5kbDsKICAgICAgICBpZiAocHJvdmVya2EoaSxqLGEpKSB7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIGEucHVzaF9iYWNrKGkqMTAraik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdml2aW9kX3ZlY3RvcmEoYSk7IGNvdXQ8PGVuZGw8PGVuZGw7CiAgICAgICAgICAgIGlmIChqPG4pIHsKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICByZWN1cnMobixqKzEsYSxkLHZpdm9kKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYS5wb3BfYmFjaygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhLnNpemUoKT09bikgewogICAgICAgICAgICAgICAgdml2b2QrKzsKICAgICAgICAgICAgICAgIGEucG9wX2JhY2soKTsKICAgICAgICAgICAgfSAgCiAgICAgICAgfQogICAgICAgIAogICAgfQp9CgppbnQgbWFpbigpIHsKICBjaW4+Pm47CiAgaW50IHZpdm9kKDApOwppbnQgZD0xOwogICAgdmVjdG9yIDxpbnQ+IGE7CiAgICBpbnQgaigxKTsKICByZWN1cnMgKG4saixhLGQsdml2b2QpOwogIGNvdXQ8PHZpdm9kOwogIHJldHVybiAwOwp9Cg==