#include <iostream>
using namespace std;
int cnt=0;
void gen(int a[8], int pos)
{
if (pos<8){ // если не все столбцы определены
for(int i=0;i<8;i++){
int correct=1;
for(int j=0;j<pos;j++)
if(a[j]==i || abs(a[j]-i)==pos-j)correct=0; // первое условие - несовпадение строк, второе несовпадение диагоналей
if( correct){
a[pos]=i; // если для текущего столбца вариант обнаружен сохраняем вариант
gen(a,pos+1); // и рекурсивно заполняем следующий
}
}
}else{ // если сюда попали - все столбцы определы, а заодно и диагонали проверены
cnt++;
}
}
int main()
{
int a[8];
gen(a,0);
cout<<cnt;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IGNudD0wOwoKdm9pZCBnZW4oaW50IGFbOF0sIGludCBwb3MpCnsJCglpZiAocG9zPDgpeyAvLyDQtdGB0LvQuCDQvdC1INCy0YHQtSDRgdGC0L7Qu9Cx0YbRiyDQvtC/0YDQtdC00LXQu9C10L3RiwoJCWZvcihpbnQgaT0wO2k8ODtpKyspewoJCQlpbnQgY29ycmVjdD0xOwoJCQlmb3IoaW50IGo9MDtqPHBvcztqKyspCgkJCQlpZihhW2pdPT1pIHx8IGFicyhhW2pdLWkpPT1wb3Mtailjb3JyZWN0PTA7IC8vINC/0LXRgNCy0L7QtSDRg9GB0LvQvtCy0LjQtSAtINC90LXRgdC+0LLQv9Cw0LTQtdC90LjQtSDRgdGC0YDQvtC6LCDQstGC0L7RgNC+0LUg0L3QtdGB0L7QstC/0LDQtNC10L3QuNC1INC00LjQsNCz0L7QvdCw0LvQtdC5CgkJCWlmKCBjb3JyZWN0KXsKCQkJCWFbcG9zXT1pOyAgLy8g0LXRgdC70Lgg0LTQu9GPINGC0LXQutGD0YnQtdCz0L4g0YHRgtC+0LvQsdGG0LAg0LLQsNGA0LjQsNC90YIg0L7QsdC90LDRgNGD0LbQtdC9INGB0L7RhdGA0LDQvdGP0LXQvCDQstCw0YDQuNCw0L3RggoJCQkJZ2VuKGEscG9zKzEpOyAvLyDQuCDRgNC10LrRg9GA0YHQuNCy0L3QviDQt9Cw0L/QvtC70L3Rj9C10Lwg0YHQu9C10LTRg9GO0YnQuNC5CgkJCX0KCQl9Cgl9ZWxzZXsgIC8vINC10YHQu9C4INGB0Y7QtNCwINC/0L7Qv9Cw0LvQuCAtINCy0YHQtSDRgdGC0L7Qu9Cx0YbRiyDQvtC/0YDQtdC00LXQu9GLLCDQsCDQt9Cw0L7QtNC90L4g0Lgg0LTQuNCw0LPQvtC90LDQu9C4INC/0YDQvtCy0LXRgNC10L3RiwoJCWNudCsrOwoJfQp9CgppbnQgbWFpbigpCnsKCWludCBhWzhdOwoJZ2VuKGEsMCk7Cgljb3V0PDxjbnQ7Cn0K