#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define pb push_back
#define gcd(a,b) __gcd(a,b)
#define all(n) n.begin(),n.end()
#define lcm(a,b) a*b/gcd(a,b)
bool cmp(int a, int b) {
return a > b;
}
// vector<ll> divisors_num(ll n) {
// vector<ll> div;
// for (int i = 1; i * i <= n; i++) {
// if (n % i == 0) {
// div.pb(i);
// if (n / i != i) {
// div.pb(n / i);
// }
// }
// }
// return div;
// }
// void printvec(vector<ll> v) {
// for (auto x : v) {
// cout << x << " ";
// }
// cout << endl;
// }
int ld[15] = {0}, rd[15] = {0}, row[8] = {0};
ll cnt = 0;
ll did_rec=0;
ll did_back=0;
void col(vector<vector<char>> &v , ll j) {
if (j > 7) {
cnt++;
for (int i = 0 ; i < 8 ; i++) {
for (int j = 0 ; j < 8 ; j++) {
cout<< v[i][j];
}
cout<<endl;
}
cout<<"Recursion steps: "<<did_rec<<" "<<"backtrack steps: "<<did_back<<endl;
did_rec=0;
did_back=0;
return;
}
for (int i = 0 ; i < 8 ; i++) {
if (v[i][j] == '.' && ld[i - j + 7] == 0 && rd[i + j] == 0 && row[i] == 0) {
ld[i - j + 7] = 1, rd[i + j] = 1 , row[i] = 1;
v[i][j]='Q';
did_rec++;
col(v, j + 1);
v[i][j]='.';
did_back++;
ld[i - j + 7] = 0, rd[i + j] = 0 , row[i] = 0;
}
}
}
void solve() {
vector<vector<char>> v(8, vector<char>(8));
for (int i = 0 ; i < 8 ; i++) {
for (int j = 0 ; j < 8 ; j++) {
cin >> v[i][j];
}
}
col(v, 0);
cout << cnt << endl;
}
int main() {
#ifdef ONLINEJUDGE
clock_t tStart = clock();
freopen("input.txt", "r", stdin); //can need to change file . this one for taking input
freopen("output.txt", "w", stdout); // this one for output
#endif
// ll t;
// cin >> t;
// while (t--) {
// solve();
// }
solve();
#ifdef ONLINEJUDGE
fprintf(stderr, "\n>> Runtime: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC); // this line gives your code runtime
#endif
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlICAgIHN0ZDsKI2RlZmluZSBsbCBsb25nIGxvbmcgaW50CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgZ2NkKGEsYikgX19nY2QoYSxiKQojZGVmaW5lIGFsbChuKSBuLmJlZ2luKCksbi5lbmQoKQojZGVmaW5lIGxjbShhLGIpIGEqYi9nY2QoYSxiKQpib29sIGNtcChpbnQgYSwgaW50IGIpIHsKICAgcmV0dXJuIGEgPiBiOwp9Ci8vIHZlY3RvcjxsbD4gZGl2aXNvcnNfbnVtKGxsIG4pIHsKLy8gICAgdmVjdG9yPGxsPiBkaXY7CgovLyAgICBmb3IgKGludCBpID0gMTsgaSAqIGkgPD0gbjsgaSsrKSB7Ci8vICAgICAgIGlmIChuICUgaSA9PSAwKSB7Ci8vICAgICAgICAgIGRpdi5wYihpKTsKLy8gICAgICAgICAgaWYgKG4gLyBpICE9IGkpIHsKLy8gICAgICAgICAgICAgZGl2LnBiKG4gLyBpKTsKLy8gICAgICAgICAgfQovLyAgICAgICB9CgovLyAgICB9Ci8vICAgIHJldHVybiBkaXY7Ci8vIH0KLy8gdm9pZCBwcmludHZlYyh2ZWN0b3I8bGw+IHYpIHsKLy8gICAgZm9yIChhdXRvIHggOiB2KSB7Ci8vICAgICAgIGNvdXQgPDwgeCA8PCAiICI7Ci8vICAgIH0KLy8gICAgY291dCA8PCBlbmRsOwovLyB9CgoKCmludCBsZFsxNV0gPSB7MH0sIHJkWzE1XSA9IHswfSwgcm93WzhdID0gezB9OwpsbCBjbnQgPSAwOwpsbCBkaWRfcmVjPTA7CmxsIGRpZF9iYWNrPTA7CnZvaWQgY29sKHZlY3Rvcjx2ZWN0b3I8Y2hhcj4+ICZ2ICwgbGwgaikgewogICBpZiAoaiA+IDcpIHsKICAgICAgY250Kys7CiAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCA4IDsgaSsrKSB7CiAgICAgIGZvciAoaW50IGogPSAwIDsgaiA8IDggOyBqKyspIHsKICAgICAgICAgY291dDw8IHZbaV1bal07CiAgICAgIH0KY291dDw8ZW5kbDsKICAgfQogICBjb3V0PDwiUmVjdXJzaW9uIHN0ZXBzOiAiPDxkaWRfcmVjPDwiICI8PCJiYWNrdHJhY2sgc3RlcHM6ICI8PGRpZF9iYWNrPDxlbmRsOwogICBkaWRfcmVjPTA7CiAgIGRpZF9iYWNrPTA7CiAgICAgIHJldHVybjsKICAgfQogICBmb3IgKGludCBpID0gMCA7IGkgPCA4IDsgaSsrKSB7CiAgICAgIGlmICh2W2ldW2pdID09ICcuJyAmJiBsZFtpIC0gaiArIDddID09IDAgJiYgcmRbaSArIGpdID09IDAgJiYgcm93W2ldID09IDApIHsKICAgICAgICAgbGRbaSAtIGogKyA3XSA9IDEsIHJkW2kgKyBqXSA9IDEgLCByb3dbaV0gPSAxOwogICAgICAgICB2W2ldW2pdPSdRJzsKICAgZGlkX3JlYysrOwogICAgICAgICBjb2wodiwgaiArIDEpOwogICAgICAgICB2W2ldW2pdPScuJzsKICBkaWRfYmFjaysrOwogICAgICAgICBsZFtpIC0gaiArIDddID0gMCwgcmRbaSArIGpdID0gMCAsIHJvd1tpXSA9IDA7CiAgICAgIH0KICAgfQoKCn0KCgp2b2lkIHNvbHZlKCkgewogICB2ZWN0b3I8dmVjdG9yPGNoYXI+PiB2KDgsIHZlY3RvcjxjaGFyPig4KSk7CiAgIGZvciAoaW50IGkgPSAwIDsgaSA8IDggOyBpKyspIHsKICAgICAgZm9yIChpbnQgaiA9IDAgOyBqIDwgOCA7IGorKykgewogICAgICAgICBjaW4gPj4gdltpXVtqXTsKICAgICAgfQoKICAgfQogICBjb2wodiwgMCk7CiAgIGNvdXQgPDwgY250IDw8IGVuZGw7CgoKCgp9CgoKCmludCBtYWluKCkgewoKI2lmZGVmIE9OTElORUpVREdFCiAgIGNsb2NrX3QgdFN0YXJ0ID0gY2xvY2soKTsKICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7IC8vY2FuIG5lZWQgdG8gY2hhbmdlIGZpbGUgLiB0aGlzIG9uZSBmb3IgdGFraW5nIGlucHV0CiAgIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7IC8vIHRoaXMgb25lIGZvciBvdXRwdXQKI2VuZGlmCgogICAvLyBsbCB0OwogICAvLyBjaW4gPj4gdDsKICAgLy8gd2hpbGUgKHQtLSkgewogICAvLyAgICBzb2x2ZSgpOwoKCiAgIC8vIH0KICAgc29sdmUoKTsKCgojaWZkZWYgT05MSU5FSlVER0UKICAgZnByaW50ZihzdGRlcnIsICJcbj4+IFJ1bnRpbWU6ICUuMTBmc1xuIiwgKGRvdWJsZSkgKGNsb2NrKCkgLSB0U3RhcnQpIC8gQ0xPQ0tTX1BFUl9TRUMpOyAvLyB0aGlzIGxpbmUgZ2l2ZXMgeW91ciBjb2RlIHJ1bnRpbWUKI2VuZGlmCgogICByZXR1cm4gMDsKfQ==