#include <bits/stdc++.h>
using namespace std;
const int nm = 200;
int n;
char a[nm][nm], c[nm][nm];
char kq[nm][nm];
vector<pair<int, int> > b;
vector<pair<int, int> > d;
bool hople(int i, int j) { return i >= 0 && i < n && j >= 0 && j < n; }
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    scanf("%s", a[i]);
    for (int j = 0; j < n; ++j)
      if (a[i][j] == 'o') b.push_back(make_pair(i, j));
  }
  for (int i = 0; i < 2 * n - 1; ++i)
    for (int j = 0; j < 2 * n - 1; ++j) kq[i][j] = '.';
  int ct = n - 1;
  kq[ct][ct] = 'o';
  for (int i = 1 - n; i < n; ++i) {
    for (int j = 1 - n; j < n; ++j) {
      if (!i && !j) continue;
      bool ok = 1;
      for (int u = 0; u < b.size(); ++u) {
        int x = b[u].first;
        int y = b[u].second;
        if (hople(x + i, y + j)) {
          if (a[x + i][y + j] == '.') {
            ok = 0;
            break;
          }
        }
      }
      if (ok) {
        kq[ct + i][ct + j] = 'x';
        d.push_back(make_pair(i, j));
      }
    }
  }
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < n; ++j) c[i][j] = '.';
  for (int i = 0; i < b.size(); ++i) {
    int x = b[i].first;
    int y = b[i].second;
    c[x][y] = 'o';
    for (int j = 0; j < d.size(); ++j) {
      if (hople(x + d[j].first, y + d[j].second) &&
          c[x + d[j].first][y + d[j].second] == '.')
        c[x + d[j].first][y + d[j].second] = 'x';
    }
  }
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j)
      if (c[i][j] != a[i][j]) {
        printf("NO\n");
        return 0;
      }
  }
  printf("YES\n");
  for (int i = 0; i < 2 * n - 1; ++i) printf("%s\n", kq[i]);
}
