#include <bits/stdc++.h>
using namespace std;
const int INF = 1000000000;
struct debugger {
  template <typename T>
  debugger& operator,(const T& v) {
    cerr << v << " ";
    return *this;
  }
} dbg;
char b[100][100];
int n;
bool in(int x) { return x >= 0 && x < n; }
bool in(int x, int y) { return in(x) && in(y); }
char a[200][200];
int main() {
  scanf("%d", &n);
  for (int i = 0; i < (n); i++) scanf("%s", b[i]);
  vector<pair<int, int> > ans;
  for (int dx = (-n + 1); dx <= (n - 1); dx++) {
    for (int dy = (-n + 1); dy <= (n - 1); dy++) {
      if (dx == 0 && dy == 0) {
        continue;
      }
      bool fail = false;
      for (int i = 0; i < (n); i++) {
        for (int j = 0; j < (n); j++) {
          if (b[i][j] == 'o' && in(i + dx, j + dy) &&
              b[i + dx][j + dy] == '.') {
            fail = true;
          }
        }
      }
      if (!fail) {
        ans.emplace_back(dx, dy);
      }
    }
  }
  for (int i = 0; i < (n); i++)
    for (int j = 0; j < (n); j++) {
      if (b[i][j] == 'x') {
        bool success = false;
        for (auto& p : ans) {
          if (in(i - p.first, j - p.second) &&
              b[i - p.first][j - p.second] == 'o') {
            success = true;
          }
        }
        if (!success) {
          puts("NO");
          return 0;
        }
      }
    }
  puts("YES");
  for (int i = 0; i < (2 * n - 1); i++) {
    for (int j = 0; j < (2 * n - 1); j++) {
      a[i][j] = '.';
    }
  }
  a[n - 1][n - 1] = 'o';
  for (auto& p : ans) {
    a[n - 1 + p.first][n - 1 + p.second] = 'x';
  }
  for (int i = 0; i < (2 * n - 1); i++) {
    puts(a[i]);
  }
}
