#include <bits/stdc++.h>
using namespace std;
char m[60][60];
bool mark[60][60];
vector<pair<int, int> > moves;
map<pair<int, int>, int> m1;
char out[150][150];
int main() {
  int n, i, j, k, l;
  bool f, g = 0;
  scanf("%d", &n);
  for (i = 0; i < n; ++i) {
    for (j = 0; j < n; ++j) mark[i][j] = 0;
  }
  for (i = 0; i < n; ++i) {
    scanf("%s", &m[i]);
  }
  for (i = -n + 1; i < n; ++i) {
    for (j = -n + 1; j < n; ++j) {
      f = 0;
      for (k = 0; k < n; ++k) {
        for (l = 0; l < n; ++l) {
          if (m[k][l] == 'o') {
            if (k + i >= 0 && k + i < n && l + j >= 0 && l + j < n) {
              if (m[k + i][l + j] == '.') {
                f = 1;
                break;
              }
            }
          }
        }
        if (f) break;
      }
      if (i == 0 && j == 0)
        m1[make_pair(i, j)] = 0;
      else
        m1[make_pair(i, j)] = 1 - f;
    }
  }
  for (i = 0; i < n; ++i) {
    for (j = 0; j < n; ++j) {
      if (m[i][j] == 'x') {
        f = 0;
        for (k = 0; k < n; ++k) {
          for (l = 0; l < n; ++l) {
            if (m[k][l] == 'o') {
              if (m1[make_pair(i - k, j - l)]) {
                f = 1;
                moves.push_back(make_pair(i - k, j - l));
                break;
              }
            }
          }
        }
        if (!f) {
          g = 1;
          break;
        }
      }
    }
    if (g) break;
  }
  if (g) {
    printf("NO\n");
  } else {
    printf("YES\n");
    for (i = 0; i < 120; ++i) {
      for (j = 0; j < 120; ++j) out[i][j] = '.';
    }
    out[n - 1][n - 1] = 'o';
    for (i = 0; i < moves.size(); ++i) {
      out[n - 1 + moves[i].first][n - 1 + moves[i].second] = 'x';
    }
    for (i = 0; i < 2 * n - 1; ++i) {
      for (j = 0; j < 2 * n - 1; ++j) {
        printf("%c", out[i][j]);
      }
      printf("\n");
    }
  }
}
