#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T sqr(const T& x) {
  return x * x;
}
template <class T>
inline void updMin(T& a, const T& b) {
  if (b < a) a = b;
}
template <class T>
inline void updMax(T& a, const T& b) {
  if (b > a) a = b;
}
vector<string> s, ans;
int n;
int reached[100][100];
int main() {
  int all_r = 0;
  cin >> n;
  s.resize(n);
  for (int i = 0; i < n; i++) {
    cin >> s[i];
    for (int j = 0; j < n; j++) {
      if (s[i][j] == 'x') all_r++;
    }
  }
  ans.resize(2 * n - 1, string(2 * n - 1, '.'));
  ans[n - 1][n - 1] = 'o';
  for (int x = -n + 1; x <= n - 1; x++) {
    for (int y = -n + 1; y <= n - 1; y++) {
      bool ok = 1;
      for (int i = 0; ok && i < n; i++) {
        for (int j = 0; ok && j < n; j++) {
          if (s[i][j] == 'o') {
            if (i + x >= 0 && i + x < n && j + y >= 0 && j + y < n &&
                s[i + x][j + y] == '.')
              ok = 0;
          }
        }
      }
      if (!ok) continue;
      if (ok) {
        ans[n + x - 1][n + y - 1] = 'x';
      }
      for (int i = 0; ok && i < n; i++) {
        for (int j = 0; ok && j < n; j++) {
          if (s[i][j] == 'o') {
            if (i + x >= 0 && i + x < n && j + y >= 0 && j + y < n &&
                s[i + x][j + y] == 'x' && reached[i + x][j + y] == 0) {
              reached[i + x][j + y] = 1;
              all_r--;
            }
          }
        }
      }
    }
  }
  ans[n - 1][n - 1] = 'o';
  if (all_r) {
    cout << "NO\n";
    return 0;
  } else {
    cout << "YES\n";
    for (int i = 0; i < 2 * n - 1; i++) {
      cout << ans[i] << "\n";
    }
  }
  return 0;
}
