#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define nl "\n"
#define OO 0x3f3f3f3f
using namespace std;
const int dx[] = {0, 0, 1, -1, -1, -1, 1, 1};
const int dy[] = {1, -1, 0, 0, 1, -1, 1, -1};
void ta2to2a()
{
ios_base::sync_with_stdio(false), cout.tie(nullptr), cin.tie(nullptr);
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
}
vector<vector<char>> grid;
bool isValid(int x, int y)
{
return x >= 0 && x < 8 && y >= 0 && y < 8 && grid[x][y] != '*';
}
bool visited[8][8] = {false};
ll ways(int x)
{
ll ans = 0;
if (x == 8)
{
return 1;
}
for (int i = 0; i < 8; i++)
{
if (isValid(x, i) && !visited[x][i])
{
visited[x][i] = true;
for (int j = 0; j < 8; j++)
{
visited[x][j] = true;
}
for (int j = 0; j < 8; j++)
{
visited[j][i] = true;
}
for (int j = 0; j < 8; j++)
{
for (int k = 0; k < 8; k++)
{
if (abs(k - j) == abs(x - i))
{
visited[j][k] = true;
}
}
}
ans += ways(x + 1);
}
}
return ans;
}
void solve()
{
grid = vector<vector<char>>(8, vector<char>(8));
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
cin >> grid[i][j];
}
}
cout << ways(0);
}
int main()
{
ta2to2a();
int t = 1;
// cin >> t;
while (t--)
{
solve();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBubCAiXG4iCiNkZWZpbmUgT08gMHgzZjNmM2YzZgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgZHhbXSA9IHswLCAwLCAxLCAtMSwgLTEsIC0xLCAxLCAxfTsKY29uc3QgaW50IGR5W10gPSB7MSwgLTEsIDAsIDAsIDEsIC0xLCAxLCAtMX07CnZvaWQgdGEydG8yYSgpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpLCBjb3V0LnRpZShudWxscHRyKSwgY2luLnRpZShudWxscHRyKTsKI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmCn0KdmVjdG9yPHZlY3RvcjxjaGFyPj4gZ3JpZDsKYm9vbCBpc1ZhbGlkKGludCB4LCBpbnQgeSkKewogICAgcmV0dXJuIHggPj0gMCAmJiB4IDwgOCAmJiB5ID49IDAgJiYgeSA8IDggJiYgZ3JpZFt4XVt5XSAhPSAnKic7Cn0KYm9vbCB2aXNpdGVkWzhdWzhdID0ge2ZhbHNlfTsKbGwgd2F5cyhpbnQgeCkKewogICAgbGwgYW5zID0gMDsKICAgIGlmICh4ID09IDgpCiAgICB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykKICAgIHsKICAgICAgICBpZiAoaXNWYWxpZCh4LCBpKSAmJiAhdmlzaXRlZFt4XVtpXSkKICAgICAgICB7CiAgICAgICAgICAgIHZpc2l0ZWRbeF1baV0gPSB0cnVlOwogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmlzaXRlZFt4XVtqXSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZpc2l0ZWRbal1baV0gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IDg7IGsrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoYWJzKGsgLSBqKSA9PSBhYnMoeCAtIGkpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRlZFtqXVtrXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGFucyArPSB3YXlzKHggKyAxKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gYW5zOwp9CnZvaWQgc29sdmUoKQp7CiAgICBncmlkID0gdmVjdG9yPHZlY3RvcjxjaGFyPj4oOCwgdmVjdG9yPGNoYXI+KDgpKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKQogICAgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgY2luID4+IGdyaWRbaV1bal07CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCB3YXlzKDApOwp9CmludCBtYWluKCkKewogICAgdGEydG8yYSgpOwogICAgaW50IHQgPSAxOwogICAgLy8gY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKQogICAgewogICAgICAgIHNvbHZlKCk7CiAgICB9Cn0=