// #include <atcoder/all>
// using namespace atcoder;
// using mint = modint998244353;
// using mint = modint1000000007;
#include <bits/stdc++.h>
#define all(v) (v).begin(), (v).end()
#define rall(v) (v).rbegin(), (v).rend()
#define rep(i,n) for (int i = 0; i < (n); ++i)
#define rep2(i,k,n) for (int i = (k); i < (n); ++i)
using namespace std;
using ll = long long;
// using P = pair<ll,ll>;
using P = pair<int,int>;
using vint = vector<int>;
using vll = vector<ll>;
using vvint = vector<vector<int>>;
using vvll = vector<vector<ll>>;
// const ll INF = (ll)2e18+9;
const int INF = (int)2e9+7;
// const ll MOD = (ll)1e9+9;
template<typename T>
void chmin(T &a, T b) { a = min(a, b); }
template<typename T>
void chmax(T &a, T b) { a = max(a, b); }
template<typename T>
void print(vector<T> v) {
int n = v.size();
rep(i,n) {
if (i == 0) cout << v[i];
else cout << ' ' << v[i];
}
cout << endl;
}
vector<string> grid;
int n;
bool search(int i, int j, int di, int dj) {
// (i, j): start point
// (fi, fj): final point
int fi = i + di * 5;
int fj = j + dj * 5;
if (fi < 0 || fi >= n || fj < 0 || fj >= n) return false;
int rem = 6;
int r = i, c = j;
int numwhite = 0;
rep(i,rem) {
numwhite += grid[r][c] == '.';
r += di;
c += dj;
}
if (numwhite <= 2) {
return true;
}
return false;
}
void solve() {
cin >> n;
grid.resize(n);
rep(i,n) cin >> grid[i];
rep(i,n) {
rep(j,n) {
// direction
rep2(di,-1,2) rep2(dj,-1,2) {
if (di == 0 && dj == 0) continue;
if (search(i, j, di, dj)) {
cout << "Yes" << endl;
return;
};
}
}
}
cout << "No" << endl;
}
int main() {
solve();
return 0;
}