#include <bits/stdc++.h>
using namespace std;
#define ll long long
// #define int long long int
#define ld long double
#define all(x) x.begin(), x.end()
#define sortall(x) sort(all(x))
#define endl '\n'
#define fast ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
template<class T>
void printC (T Collection)
{
for (auto&i:Collection)
cout << i << " \n";
cout << '\n';
}
/*
* Think twice, code once
* Think of different approaches to tackle a problem: write them down.
* Think of different views of the problem. don't look from only one side.
* don't get stuck in one approach.
* common mistakes: - over_flow
* - out_of_bound index
* - infinite loop
* - corner cases
* - duplication counting.
*/
bool attack(pair<int, int> a, pair<int, int> Q)
{
for (int i = Q.first-1; i >= 0; --i)
if (a.first == i && a.second == Q.second)
return true;
for (int i = Q.first+1; i < 8; ++i)
if (a.first == i && a.second == Q.second)
return true;
for (int i = Q.second-1; i >= 0; --i)
if (a.first == Q.first && a.second == i)
return true;
for (int i = Q.second+1; i < 8; ++i)
if (a.first == Q.first && a.second == i)
return true;
for (int i = Q.first-1, j = Q.second-1; i >= 0 && j >= 0; --i, --j)
if (a.first == i && a.second == j)
return true;
for (int i = Q.first+1, j = Q.second+1; i < 8 && j < 8; ++i, ++j)
if (a.first == i && a.second == j)
return true;
for (int i = Q.first-1, j = Q.second+1; i >= 0 && j < 8; --i, ++j)
if (a.first == i && a.second == j)
return true;
for (int i = Q.first+1, j = Q.second-1; i < 8 && j >= 0; ++i, --j)
if (a.first == i && a.second == j)
return true;
return false;
}
void solve()
{
vector<vector<char>> v(8,vector<char>(8));
set<pair<int, int>> pos;
for (int i = 0; i < 8; ++i)
{
for (int j = 0; j < 8; ++j)
{
cin >> v[i][j];
if (v[i][j] == 'Q')
pos.insert({i,j});
}
}
for (auto&i:pos)
for (auto&j:pos)
if (attack(j, i))
{
cout << "invalid";
return;
}
cout << "valid";
}
int32_t main()
{
// #ifndef ONLINE_JUDGE
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
// freopen("Errors.txt", "w", stderr);
// #endif
fast
int t = 1;
// cin >> t;
while (t--)
{
solve();
if (t) cout << '\n';
}
cout << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCi8vICNkZWZpbmUgaW50IGxvbmcgbG9uZyBpbnQKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKI2RlZmluZSBzb3J0YWxsKHgpIHNvcnQoYWxsKHgpKQojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTtjaW4udGllKDApO2NvdXQudGllKDApOwp0ZW1wbGF0ZTxjbGFzcyBUPgp2b2lkIHByaW50QyAoVCBDb2xsZWN0aW9uKQp7CiAgICBmb3IgKGF1dG8maTpDb2xsZWN0aW9uKQogICAgICAgIGNvdXQgPDwgaSA8PCAiIFxuIjsKICAgIGNvdXQgPDwgJ1xuJzsKfQoKLyoKICogVGhpbmsgdHdpY2UsIGNvZGUgb25jZQogKiBUaGluayBvZiBkaWZmZXJlbnQgYXBwcm9hY2hlcyB0byB0YWNrbGUgYSBwcm9ibGVtOiB3cml0ZSB0aGVtIGRvd24uCiAqIFRoaW5rIG9mIGRpZmZlcmVudCB2aWV3cyBvZiB0aGUgcHJvYmxlbS4gZG9uJ3QgbG9vayBmcm9tIG9ubHkgb25lIHNpZGUuCiAqIGRvbid0IGdldCBzdHVjayBpbiBvbmUgYXBwcm9hY2guCiAqIGNvbW1vbiBtaXN0YWtlczogLSBvdmVyX2Zsb3cKICogICAgICAgICAgICAgICAgICAtIG91dF9vZl9ib3VuZCBpbmRleAogKiAgICAgICAgICAgICAgICAgIC0gaW5maW5pdGUgbG9vcAogKiAgICAgICAgICAgICAgICAgIC0gY29ybmVyIGNhc2VzCiAqICAgICAgICAgICAgICAgICAgLSBkdXBsaWNhdGlvbiBjb3VudGluZy4KKi8KCmJvb2wgYXR0YWNrKHBhaXI8aW50LCBpbnQ+IGEsIHBhaXI8aW50LCBpbnQ+IFEpCnsKICAgIGZvciAoaW50IGkgPSBRLmZpcnN0LTE7IGkgPj0gMDsgLS1pKQogICAgICAgIGlmIChhLmZpcnN0ID09IGkgJiYgYS5zZWNvbmQgPT0gUS5zZWNvbmQpCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgZm9yIChpbnQgaSA9IFEuZmlyc3QrMTsgaSA8IDg7ICsraSkKICAgICAgICBpZiAoYS5maXJzdCA9PSBpICYmIGEuc2Vjb25kID09IFEuc2Vjb25kKQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKCiAgICBmb3IgKGludCBpID0gUS5zZWNvbmQtMTsgaSA+PSAwOyAtLWkpCiAgICAgICAgaWYgKGEuZmlyc3QgPT0gUS5maXJzdCAmJiBhLnNlY29uZCA9PSBpKQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIGZvciAoaW50IGkgPSBRLnNlY29uZCsxOyBpIDwgODsgKytpKQogICAgICAgIGlmIChhLmZpcnN0ID09IFEuZmlyc3QgJiYgYS5zZWNvbmQgPT0gaSkKICAgICAgICAgICAgcmV0dXJuIHRydWU7CgogICAgZm9yIChpbnQgaSA9IFEuZmlyc3QtMSwgaiA9IFEuc2Vjb25kLTE7IGkgPj0gMCAmJiBqID49IDA7IC0taSwgLS1qKQogICAgICAgIGlmIChhLmZpcnN0ID09IGkgJiYgYS5zZWNvbmQgPT0gaikKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICBmb3IgKGludCBpID0gUS5maXJzdCsxLCBqID0gUS5zZWNvbmQrMTsgaSA8IDggJiYgaiA8IDg7ICsraSwgKytqKQogICAgICAgIGlmIChhLmZpcnN0ID09IGkgJiYgYS5zZWNvbmQgPT0gaikKICAgICAgICAgICAgcmV0dXJuIHRydWU7CgogICAgZm9yIChpbnQgaSA9IFEuZmlyc3QtMSwgaiA9IFEuc2Vjb25kKzE7IGkgPj0gMCAmJiBqIDwgODsgLS1pLCArK2opCiAgICAgICAgaWYgKGEuZmlyc3QgPT0gaSAmJiBhLnNlY29uZCA9PSBqKQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIGZvciAoaW50IGkgPSBRLmZpcnN0KzEsIGogPSBRLnNlY29uZC0xOyBpIDwgOCAmJiBqID49IDA7ICsraSwgLS1qKQogICAgICAgIGlmIChhLmZpcnN0ID09IGkgJiYgYS5zZWNvbmQgPT0gaikKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gZmFsc2U7Cn0KCnZvaWQgc29sdmUoKQp7CiAgICB2ZWN0b3I8dmVjdG9yPGNoYXI+PiB2KDgsdmVjdG9yPGNoYXI+KDgpKTsKICAgIHNldDxwYWlyPGludCwgaW50Pj4gcG9zOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyArK2kpCiAgICB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA4OyArK2opCiAgICAgICAgewogICAgICAgICAgICBjaW4gPj4gdltpXVtqXTsKICAgICAgICAgICAgaWYgKHZbaV1bal0gPT0gJ1EnKQogICAgICAgICAgICAgICAgcG9zLmluc2VydCh7aSxqfSk7CiAgICAgICAgfQogICAgfQogICAgZm9yIChhdXRvJmk6cG9zKQogICAgICAgIGZvciAoYXV0byZqOnBvcykKICAgICAgICAgICAgaWYgKGF0dGFjayhqLCBpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY291dCA8PCAiaW52YWxpZCI7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgIGNvdXQgPDwgInZhbGlkIjsKfQoKaW50MzJfdCBtYWluKCkKewogICAgLy8gI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgIC8vICAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTsKICAgIC8vICAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwogICAgLy8gICAgIGZyZW9wZW4oIkVycm9ycy50eHQiLCAidyIsIHN0ZGVycik7CiAgICAvLyAjZW5kaWYKICAgIGZhc3QKICAgIGludCB0ID0gMTsKICAgIC8vIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkKICAgIHsKICAgICAgICBzb2x2ZSgpOwogICAgICAgIGlmICh0KSBjb3V0IDw8ICdcbic7CiAgICB9CiAgICBjb3V0IDw8ICdcbic7CiAgICByZXR1cm4gMDsKfQ==