#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > vec[100];
bool check(int i, int j) {
  if (vec[i].empty() || vec[j].empty()) return 0;
  for (int t = 0; t < vec[j].size(); t++) {
    int x = vec[j][t].first, y = vec[j][t].second;
    if (vec[i][0].first <= x && x <= vec[i].back().first &&
        vec[i][0].second <= y && y <= vec[i].back().second)
      return 1;
  }
  return 0;
}
void solve() {
  for (int i = 0; i <= 26; i++) vec[i].clear();
  int n, m;
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      char c;
      cin >> c;
      if (c != '.')
        vec[c - 'a'].push_back({i, j});
      else
        vec[26].push_back({i, j});
    }
  }
  for (int i = 0; i < 26; i++) {
    set<int> s1, s2;
    for (int j = 0; j < vec[i].size(); j++) {
      s1.insert(vec[i][j].first);
      s2.insert(vec[i][j].second);
    }
    if (s1.size() > 1 && s2.size() > 1) {
      puts("NO");
      return;
    }
  }
  for (int i = 0; i < 26; i++) sort(vec[i].begin(), vec[i].end());
  for (int i = 0; i < 26; i++) {
    if (check(i, 26)) {
      puts("NO");
      return;
    }
    for (int j = i + 1; j < 26; j++) {
      if (check(j, i)) {
        puts("NO");
        return;
      }
    }
  }
  puts("YES");
  int cnt = -1;
  for (int i = 0; i < 26; i++) {
    if (vec[i].size()) cnt = i;
  }
  cout << cnt + 1 << endl;
  for (int i = 0; i <= cnt; i++) {
    if (vec[i].empty()) {
      cout << vec[cnt][0].first << " " << vec[cnt][0].second << " ";
      cout << vec[cnt][0].first << " " << vec[cnt][0].second << "\n";
    } else {
      cout << vec[i][0].first << " " << vec[i][0].second << " "
           << vec[i].back().first << " " << vec[i].back().second << endl;
    }
  }
}
int tests;
int main() {
  scanf("%d", &tests);
  while (tests--) {
    solve();
  }
}
