#include <bits/stdc++.h>
using namespace std;
// 2 quân hậu chiếu nhau nếu:
// + chung hàng: x
// + chung cột: x
// + chung đường chéo
// (x1, y1) và (x2, y2) chung đường chéo nếu?
// |x1 - y1| = |x2 - y2|
// => x1 - y1 = x2 - y2 hoặc x1 + y1 = x2 + y2
string a[8];
int pos[8]; // pos[i] = Vị trí (toạ độ cột) của quân hậu được đặt ở hàng thứ i
int main() {
ios::sync_with_stdio(0); cin.tie(0);
for (int i = 0; i < 8; i++) cin >> a[i];
for (int i = 0; i < 8; i++) pos[i] = i;
int ans = 0;
do {
bool good = true;
for (int i = 0; i < 8; i++) {
if (a[i][pos[i]] == '*') good = false;
}
map<int, bool> mp_sum, mp_sub;
for (int i = 0; i < 8; i++) {
int sum = i + pos[i];
int sub = i - pos[i];
if (mp_sum.count(sum) || mp_sub.count(sub)) good = false;
mp_sum[sum] = mp_sub[sub] = 1;
}
ans += good;
} while (next_permutation(pos, pos + 8));
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7IAoKLy8gMiBxdcOibiBo4bqtdSBjaGnhur91IG5oYXUgbuG6v3U6IAovLyArIGNodW5nIGjDoG5nOiB4ICAKLy8gKyBjaHVuZyBj4buZdDogeAovLyArIGNodW5nIMSRxrDhu51uZyBjaMOpbwoKLy8gKHgxLCB5MSkgdsOgICh4MiwgeTIpIGNodW5nIMSRxrDhu51uZyBjaMOpbyBu4bq/dT8gIAoKLy8gfHgxIC0geTF8ID0gfHgyIC0geTJ8ICAgIAoKLy8gPT4geDEgLSB5MSA9IHgyIC0geTIgaG/hurdjIHgxICsgeTEgPSB4MiArIHkyICAgCnN0cmluZyBhWzhdOyAgCmludCBwb3NbOF07IC8vIHBvc1tpXSA9IFbhu4sgdHLDrSAodG/huqEgxJHhu5kgY+G7mXQpIGPhu6dhIHF1w6JuIGjhuq11IMSRxrDhu6NjIMSR4bq3dCDhu58gaMOgbmcgdGjhu6kgaQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgIAoJZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIGNpbiA+PiBhW2ldOyAgCgoJZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHBvc1tpXSA9IGk7ICAgCgoJaW50IGFucyA9IDA7ICAgCglkbyB7CgkJYm9vbCBnb29kID0gdHJ1ZTsgCgkJZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKCQkJaWYgKGFbaV1bcG9zW2ldXSA9PSAnKicpIGdvb2QgPSBmYWxzZTsgIAoJCX0gCgoJCW1hcDxpbnQsIGJvb2w+IG1wX3N1bSwgbXBfc3ViOyAgCgkJZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKCQkJaW50IHN1bSA9IGkgKyBwb3NbaV07ICAgIAoJCQlpbnQgc3ViID0gaSAtIHBvc1tpXTsgICAKCQkJaWYgKG1wX3N1bS5jb3VudChzdW0pIHx8IG1wX3N1Yi5jb3VudChzdWIpKSBnb29kID0gZmFsc2U7ICAKCQkJbXBfc3VtW3N1bV0gPSBtcF9zdWJbc3ViXSA9IDE7ICAKCQl9CQoKCQlhbnMgKz0gZ29vZDsgICAKCgl9IHdoaWxlIChuZXh0X3Blcm11dGF0aW9uKHBvcywgcG9zICsgOCkpOyAgCgkKCWNvdXQgPDwgYW5zIDw8ICdcbic7IAkKfQkK