#include <bits/stdc++.h>
using namespace std;
template <class T>
bool uin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
bool uax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
int d[300][300], t[300][300];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.precision(10);
  cout << fixed;
  int N;
  cin >> N;
  vector<string> f(N);
  for (int i = 0; i < (int)(N); ++i) cin >> f[i];
  for (int i = 0; i < (int)(2 * N - 1); ++i)
    for (int j = 0; j < (int)(2 * N - 1); ++j) d[i][j] = 1;
  for (int i = 0; i < (int)(N); ++i)
    for (int j = 0; j < (int)(N); ++j) {
      if (f[i][j] != 'o') continue;
      for (int x = 0; x < (int)(N); ++x)
        for (int y = 0; y < (int)(N); ++y)
          if (f[x][y] == '.') d[x - i + N - 1][y - j + N - 1] = 0;
    }
  for (int i = 0; i < (int)(N); ++i)
    for (int j = 0; j < (int)(N); ++j) {
      if (f[i][j] != 'o') continue;
      for (int x = 0; x < (int)(2 * N - 1); ++x)
        for (int y = 0; y < (int)(2 * N - 1); ++y) {
          int xx = i + x - (N - 1), yy = j + y - (N - 1);
          if (min(xx, yy) < 0 || max(xx, yy) >= N || !d[x][y]) continue;
          t[xx][yy] = 1;
        }
    }
  bool ok = true;
  for (int i = 0; i < (int)(N); ++i)
    for (int j = 0; j < (int)(N); ++j) {
      if (f[i][j] == 'o') continue;
      ok &= (f[i][j] == 'x') == (t[i][j] == 1);
    }
  d[N - 1][N - 1] = 2;
  if (ok) {
    cout << "YES\n";
    for (int i = 0; i < (int)(2 * N - 1); ++i) {
      for (int j = 0; j < (int)(2 * N - 1); ++j) cout << ".xo"[d[i][j]];
      cout << '\n';
    }
  } else
    cout << "NO\n";
  return 0;
}
