#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
const int MAXN = 50;
int n;
char g[MAXN][MAXN + 1];
char ret[2 * MAXN - 1][2 * MAXN];
void run() {
  scanf("%d", &n);
  for (int i = (0); i < (n); ++i) scanf("%s", g[i]);
  for (int i = (0); i < (2 * n - 1); ++i) {
    for (int j = (0); j < (2 * n - 1); ++j) ret[i][j] = 'x';
    ret[i][2 * n] = '\0';
  }
  ret[n - 1][n - 1] = 'o';
  for (int i = (0); i < (n); ++i)
    for (int j = (0); j < (n); ++j)
      if (g[i][j] == 'o')
        for (int ii = (0); ii < (n); ++ii)
          for (int jj = (0); jj < (n); ++jj)
            if (g[ii][jj] == '.') {
              ret[n + ii - i - 1][n + jj - j - 1] = '.';
            }
  bool ok = true;
  for (int i = (0); i < (n); ++i)
    for (int j = (0); j < (n); ++j)
      if (g[i][j] == 'x') {
        bool found = false;
        for (int ii = (0); ii < (n); ++ii)
          for (int jj = (0); jj < (n); ++jj)
            if (g[ii][jj] == 'o' && ret[n + i - ii - 1][n + j - jj - 1] == 'x')
              found = true;
        if (!found) ok = false;
      }
  if (!ok) {
    printf("NO\n");
    return;
  }
  printf("YES\n");
  for (int i = (0); i < (2 * n - 1); ++i) printf("%s\n", ret[i]);
}
int main() {
  run();
  return 0;
}
