#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> ii;
typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<ii> vii;
typedef vector<vii> wgraf;
typedef pair<int,ii> edge;
typedef vector <ll> vl;
typedef pair <ll, ll> LL;
typedef vector <LL> vll;
#define UNVISITED 0
#define VISITED 1
#define pb push_back
#define F first
#define S second
void SOLVE(){
ll n, m, a, b;
cin >> n >> m;
char matriz[n+5][m+5], arma[n+5][m+5], mayor='a'-1;
memset(arma, '.', sizeof arma);
map <char, vii> letras;
for (ll i=1; i<=n; i++){
for (ll j=1; j<=m; j++){
cin >> matriz[i][j];
if (matriz[i][j]!='.') {
letras[matriz[i][j]].pb({i, j});
}
}
}
for (auto i:letras){
bool fil=true, col=true;
ll f=i.S[0].F, c=i.S[0].S;
for (auto j:i.S){
if (j.F!=f) fil=false;
if (j.S!=c) col=false;
if (fil==false && col==false) {
cout << "NO\n";
return;
}
a=j.F;
b=j.S;
}
if (fil==true){
for (ll j=c; j<=b; j++) arma[f][j]=i.F;
} else {
for (ll j=f; j<=a; j++) arma[j][c]=i.F;
}
mayor=i.F;
}
for (ll i=1; i<=n; i++){
for (ll j=1; j<=m; j++) {
if (matriz[i][j]!=arma[i][j]){
cout << "NO\n";
return;
}
}
}
cout << "YES\n";
cout << max(mayor+1-'a', 0) << "\n";
for (char i='a'; i<mayor+1; i++){
if (letras[i].size()!=0)cout << letras[i][0].F << " " << letras[i][0].S << " " << letras[i][letras[i].size()-1].F << " " << letras[i][letras[i].size()-1].S << "\n";
else cout << a << " " << b << " " << a << " " << b << "\n";
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t = 1;
cin >> t;
while(t--){
SOLVE();
}
}
617. Merge Two Binary Trees | 1450. Number of Students Doing Homework at a Given Time |
700. Search in a Binary Search Tree | 590. N-ary Tree Postorder Traversal |
589. N-ary Tree Preorder Traversal | 1299. Replace Elements with Greatest Element on Right Side |
1768. Merge Strings Alternately | 561. Array Partition I |
1374. Generate a String With Characters That Have Odd Counts | 1822. Sign of the Product of an Array |
1464. Maximum Product of Two Elements in an Array | 1323. Maximum 69 Number |
832. Flipping an Image | 1295. Find Numbers with Even Number of Digits |
1704. Determine if String Halves Are Alike | 1732. Find the Highest Altitude |
709. To Lower Case | 1688. Count of Matches in Tournament |
1684. Count the Number of Consistent Strings | 1588. Sum of All Odd Length Subarrays |
1662. Check If Two String Arrays are Equivalent | 1832. Check if the Sentence Is Pangram |
1678. Goal Parser Interpretation | 1389. Create Target Array in the Given Order |
1313. Decompress Run-Length Encoded List | 1281. Subtract the Product and Sum of Digits of an Integer |
1342. Number of Steps to Reduce a Number to Zero | 1528. Shuffle String |
1365. How Many Numbers Are Smaller Than the Current Number | 771. Jewels and Stones |