#include <bits/stdc++.h>
using namespace std;
const int N = 43;
bool fl[N * N], f1[N * N], f2[N * N], f3[N][N], f4[N][N];
int t, n, m, k, cnt, q[N * N], f[N * N], g[N * N], dis[N * N], pre[N * N];
char s[N][N];
vector<int> v[N * N];
struct edg {
  int u, t;
} e[N * N];
inline int calc(int a, int b) { return (a - 1) * m + b; }
inline int find(int u) {
  if (f[u] == u) return u;
  return f[u] = find(f[u]);
}
inline bool check1() {
  for (int i = 1; i <= n * m; i++) f[i] = i;
  for (int i = 1; i <= k; i++)
    if (fl[i]) {
      if (find(e[i].u) == find(e[i].t)) return false;
      f[find(e[i].u)] = find(e[i].t);
    }
  return true;
}
inline bool check2() {
  memset(g, 0, sizeof(g));
  for (int i = 1; i <= k; i++)
    if (fl[i]) g[e[i].u]++, g[e[i].t]++;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      if ((i + j) % 2 == 0 && g[calc(i, j)] > 2 && (i != 1 || j != 1))
        return false;
  return true;
}
inline void print() {
  memset(f3, 0, sizeof(f3));
  memset(f4, 0, sizeof(f4));
  for (int i = 1; i <= k; i++)
    if (fl[i]) {
      int a = (e[i].u - 1) / m + 1, b = (e[i].u - 1) % m + 1,
          c = (e[i].t - 1) / m + 1, d = (e[i].t - 1) % m + 1;
      if (a == c)
        f3[a][b] = 1;
      else
        f4[a][b] = 1;
    }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      putchar(s[i][j]);
      if (j != m) {
        if (f3[i][j])
          putchar('O');
        else
          putchar(' ');
      }
    }
    putchar('\n');
    if (i == n) break;
    for (int j = 1; j <= m; j++) {
      if (f4[i][j])
        putchar('O');
      else
        putchar(' ');
      if (j != m) putchar(' ');
    }
    putchar('\n');
  }
}
inline bool solve() {
  for (int i = 1; i <= k; i++)
    v[i].resize(0), f1[i] = 0, f2[i] = 0, dis[i] = -1, pre[i] = 0;
  for (int i = 1; i <= k; i++) {
    if (!fl[i]) continue;
    fl[i] ^= 1;
    check1(), check2();
    for (int j = 1; j <= k; j++) {
      if (fl[j] || i == j) continue;
      if (f[find(e[j].u)] != f[find(e[j].t)]) v[j].push_back(i);
      int a = (e[j].u - 1) / m + 1, b = (e[j].u - 1) % m + 1;
      if ((a + b) % 2 == 0 && g[e[j].u] < 2)
        v[i].push_back(j);
      else if ((a + b) % 2 == 1 && g[e[j].t] < 2)
        v[i].push_back(j);
    }
    fl[i] ^= 1;
  }
  for (int i = 1; i <= k; i++)
    if (!fl[i]) {
      fl[i] ^= 1;
      if (check2()) f1[i] = 1;
      if (check1()) f2[i] = 1;
      if (f1[i] && f2[i]) return true;
      fl[i] ^= 1;
    }
  q[0] = 0;
  for (int i = 1; i <= k; i++)
    if (f1[i]) dis[i] = 0, q[++q[0]] = i;
  for (int i = 1; i <= q[0]; i++) {
    int u = q[i];
    for (int j = 0; j < v[u].size(); j++)
      if (dis[v[u][j]] == -1)
        dis[v[u][j]] = dis[u] + 1, pre[v[u][j]] = u, q[++q[0]] = v[u][j];
  }
  int pos = 0;
  dis[pos] = -1;
  for (int i = 1; i <= k; i++)
    if (f2[i] && (dis[i] < dis[pos] || dis[pos] == -1) && dis[i] != -1) pos = i;
  if (pos == 0) return false;
  while (pos > 0) {
    fl[pos] ^= 1, pos = pre[pos];
  }
  return true;
}
int main() {
  cin >> t;
  while (t--) {
    memset(fl, 0, sizeof(fl));
    scanf("%d%d", &n, &m), k = 0, cnt = 0;
    for (int i = 1; i <= n; i++) scanf("%s", s[i] + 1);
    for (int i = 1; i <= n; i++)
      for (int j = 1; j < m; j++)
        if (s[i][j] == 'O' && s[i][j + 1] == 'O' && (i != 1 || j != 1))
          k++, e[k].u = calc(i, j), e[k].t = calc(i, j + 1);
    for (int i = 1; i < n; i++)
      for (int j = 1; j <= m; j++)
        if (s[i][j] == 'O' && s[i + 1][j] == 'O' && (i != 1 || j != 1))
          k++, e[k].u = calc(i, j), e[k].t = calc(i + 1, j);
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++)
        if ((i + j) % 2 == 0 && s[i][j] == 'O') cnt -= 2;
    cnt += 2;
    while (solve()) cnt++;
    if (s[1][2] == 'O') k++, e[k].u = 1, e[k].t = 2;
    if (s[2][1] == 'O') k++, e[k].u = 1, e[k].t = m + 1;
    if (cnt < 0)
      puts("NO");
    else {
      for (int i = 1; i <= k; i++)
        if (!fl[i]) {
          fl[i] = 1;
          if (!check1()) fl[i] = 0;
        }
      int sum = 0;
      for (int i = 1; i <= k; i++)
        if (fl[i]) sum++;
      for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
          if (s[i][j] == 'O') sum--;
      sum++;
      if (sum != 0)
        puts("NO");
      else
        puts("YES"), print();
    }
  }
}
