#include<bits/stdc++.h>
using namespace std;
#define int long long
#define For(a,x,y) for(int a=x; a<=y; a++)
#define pb push_back
int n,m,a[1010][1010];
struct node{int x,y,val;};
vector<node> ans;
void paint(int x,int y){
if(x==0||x==n||y==0||y==m) return;
int val[]={a[x][y],a[x+1][y],a[x][y+1],a[x+1][y+1]};
sort(val,val+4);
if(val[3]==0) return;
bool flag=true;
For(i,0,2) if(val[i]!=0&&val[i]!=val[3]) flag=false;
if(!flag) return;
ans.pb((node){x,y,val[3]});
For(i,x,x+1) For(j,y,y+1) a[i][j]=0;
For(i,x-1,x+1) For(j,y-1,y+1) paint(i,j);
}
signed main(){
cin>>n>>m;
For(i,1,n) For(j,1,m) cin>>a[i][j];
For(i,1,n-1) For(j,1,m-1) paint(i,j);
reverse(ans.begin(),ans.end());
For(i,1,n) For(j,1,m) if(a[i][j]!=0){cout<<-1<<endl;return 0;}
cout<<ans.size()<<endl;
for(auto p:ans) printf("%lld %lld %lld\n",p.x,p.y,p.val);
}
50. Pow(x, n) | 43. Multiply Strings |
34. Find First and Last Position of Element in Sorted Array | 33. Search in Rotated Sorted Array |
17. Letter Combinations of a Phone Number | 5. Longest Palindromic Substring |
3. Longest Substring Without Repeating Characters | 1312. Minimum Insertion Steps to Make a String Palindrome |
1092. Shortest Common Supersequence | 1044. Longest Duplicate Substring |
1032. Stream of Characters | 987. Vertical Order Traversal of a Binary Tree |
952. Largest Component Size by Common Factor | 212. Word Search II |
174. Dungeon Game | 127. Word Ladder |
123. Best Time to Buy and Sell Stock III | 85. Maximal Rectangle |
84. Largest Rectangle in Histogram | 60. Permutation Sequence |
42. Trapping Rain Water | 32. Longest Valid Parentheses |
Cutting a material | Bubble Sort |
Number of triangles | AND path in a binary tree |
Factorial equations | Removal of vertices |
Happy segments | Cyclic shifts |