#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
int gi() {
  int x = 0, o = 1;
  char ch = getchar();
  while (!isdigit(ch) && ch != '-') ch = getchar();
  if (ch == '-') o = -1, ch = getchar();
  while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
  return x * o;
}
char s[N][N];
int n, m, fa[N], deg[N], id[N][N], tt,
    dx[4] = {1, 0, 0, -1}, dy[4] = {0, 1, -1, 0}, u[N], v[N], cnt, dis[N],
    pre[N], blk;
bool lim[N], in[N], can[N], vis[N][N];
vector<int> E[N];
int getf(int x) { return x == fa[x] ? x : fa[x] = getf(fa[x]); }
int check() {
  int ret = 3;
  for (int i = 1; i <= tt; i++) fa[i] = i, deg[i] = 0;
  for (int i = 1; i <= cnt; i++)
    if (in[i]) {
      if (getf(u[i]) == getf(v[i])) {
        ret ^= 1;
        break;
      }
      fa[getf(u[i])] = getf(v[i]);
    }
  for (int i = 1; i <= cnt; i++)
    if (in[i]) {
      if (lim[u[i]] && (++deg[u[i]] > 2)) {
        ret ^= 2;
        break;
      }
      if (lim[v[i]] && (++deg[v[i]] > 2)) {
        ret ^= 2;
        break;
      }
    }
  return ret;
}
bool work() {
  for (int i = 1; i <= cnt; i++)
    E[i].clear(), dis[i] = 1e9, can[i] = 0, pre[i] = 0;
  for (int i = 1; i <= cnt; i++)
    if (in[i]) {
      for (int j = 1; j <= tt; j++) fa[j] = j, deg[j] = 0;
      int fl = 3;
      for (int j = 1; j <= cnt; j++)
        if (i != j && in[j]) {
          if (getf(u[j]) == getf(v[j])) {
            fl ^= 1;
            break;
          }
          fa[getf(u[j])] = getf(v[j]);
        }
      for (int j = 1; j <= cnt; j++)
        if (i != j && in[j]) {
          if (lim[u[j]] && (++deg[u[j]] > 2)) {
            fl ^= 2;
            break;
          }
          if (lim[v[j]] && (++deg[v[j]] > 2)) {
            fl ^= 2;
            break;
          }
        }
      for (int j = 1; j <= cnt; j++)
        if (!in[j]) {
          if ((fl & 1) && getf(u[j]) != getf(v[j])) E[i].push_back(j);
          if ((fl & 2) && (!lim[u[j]] || deg[u[j]] < 2) &&
              (!lim[v[j]] || deg[v[j]] < 2))
            E[j].push_back(i);
        }
    }
  queue<int> q;
  for (int i = 1; i <= cnt; i++)
    if (!in[i]) {
      in[i] = 1;
      int t = check();
      if (t & 1) q.push(i), dis[i] = 0;
      if (t & 2) can[i] = 1;
      in[i] = 0;
    }
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    for (auto v : E[u])
      if (dis[v] == 1e9) dis[v] = dis[u] + 1, pre[v] = u, q.push(v);
  }
  int mn = 1e9, t = 0;
  for (int i = 1; i <= cnt; i++)
    if (can[i] && dis[i] < mn) mn = dis[i], t = i;
  if (!t) return 0;
  for (int i = t; i; i = pre[i]) in[i] ^= 1;
  return 1;
}
int main() {
  int T = gi();
  while (T--) {
    n = gi();
    m = gi();
    tt = cnt = blk = 0;
    memset(lim, 0, sizeof(lim));
    memset(vis, 0, sizeof(vis));
    memset(in, 0, sizeof(in));
    memset(id, 0, sizeof(id));
    for (int i = 1; i <= n; i++) scanf("%s", s[i] + 1);
    s[1][1] = 'X';
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++)
        if (s[i][j] == 'O')
          id[i][j] = ++tt, lim[tt] = (!((i + j) & 1) && i + j > 2),
          blk += lim[tt];
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++) {
        if (!id[i][j]) continue;
        if (id[i + 1][j]) u[++cnt] = id[i][j], v[cnt] = id[i + 1][j];
        if (id[i][j + 1]) u[++cnt] = id[i][j], v[cnt] = id[i][j + 1];
      }
    while (work())
      ;
    int tmp = 0;
    for (int i = 1; i <= cnt; i++) tmp += in[i];
    if (tmp != 2 * blk)
      cout << "NO\n";
    else {
      cout << "YES\n";
      s[1][1] = 'O';
      id[1][1] = ++tt;
      if (id[1][2]) u[++cnt] = id[1][1], v[cnt] = id[1][2];
      if (id[2][1]) u[++cnt] = id[1][1], v[cnt] = id[2][1];
      for (int i = 1; i <= tt; i++) fa[i] = i;
      for (int i = 1; i <= cnt; i++)
        if (in[i])
          assert(getf(u[i]) != getf(v[i])), fa[getf(u[i])] = getf(v[i]);
      for (int i = 1; i <= cnt; i++)
        if (getf(u[i]) != getf(v[i])) fa[getf(u[i])] = getf(v[i]), in[i] = 1;
      for (int i = 1; i <= cnt; i++)
        if (in[i]) vis[u[i]][v[i]] = 1;
      for (int i = 1; i <= n; i++, cout << '\n') {
        for (int j = 1; j <= m; j++) {
          cout << s[i][j];
          if (j < m) cout << (vis[id[i][j]][id[i][j + 1]] ? 'O' : ' ');
        }
        if (i < n) {
          cout << '\n';
          for (int j = 1; j <= m; j++) {
            cout << (vis[id[i][j]][id[i + 1][j]] ? 'O' : ' ');
            if (j < m) cout << ' ';
          }
        }
      }
    }
  }
  return 0;
}
