#include <bits/stdc++.h>
using namespace std;
int n, m, k;
char c[2222][2222];
struct ac {
  int minX, maxX, minY, maxY;
} t[30];
void solve() {
  int i, j, k;
  scanf("%d %d", &n, &m);
  for (i = 0; i < n; i++) {
    scanf(" %s", &c[i]);
  }
  for (i = 0; i <= 26; i++) {
    t[i].minX = t[i].maxX = t[i].minY = t[i].maxY = -1;
  }
  int v = -1;
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) {
      if (c[i][j] == '.') {
        continue;
      }
      k = c[i][j] - 'a';
      if (k > v) {
        v = k;
      }
      if (t[k].minX == -1) {
        t[k].minX = t[k].maxX = i;
        t[k].minY = t[k].maxY = j;
      } else {
        if (i > t[k].maxX) {
          t[k].maxX = i;
        } else if (i < t[k].minX) {
          t[k].minX = i;
        }
        if (j > t[k].maxY) {
          t[k].maxY = j;
        } else if (j < t[k].minY) {
          t[k].minY = j;
        }
      }
    }
  }
  for (i = 25; i >= 0; i--) {
    if (t[i].minX == -1) {
      t[i].minX = t[i + 1].minX;
      t[i].maxX = t[i + 1].maxX;
      t[i].minY = t[i + 1].minY;
      t[i].maxY = t[i + 1].maxY;
    }
    int x = t[i].maxX - t[i].minX;
    int y = t[i].maxY - t[i].minY;
    if (x >= 1 && y >= 1) {
      printf("NO\n");
      return;
    }
  }
  for (k = 0; k <= v; k++) {
    for (i = t[k].minX; i <= t[k].maxX; i++) {
      for (j = t[k].minY; j <= t[k].maxY; j++) {
        if (c[i][j] == '.' || c[i][j] < (char)('a' + k)) {
          printf("NO\n");
          return;
        }
      }
    }
  }
  printf("YES\n%d\n", v + 1);
  for (i = 0; i <= v; i++) {
    printf("%d %d %d %d\n", t[i].minX + 1, t[i].minY + 1, t[i].maxX + 1,
           t[i].maxY + 1);
  }
}
int main() {
  int tc;
  cin >> tc;
  while (tc--) {
    solve();
  }
  return 0;
}
