import javax.xml.transform.Result;import java.util.Arrays;import java.util.Scanner;//若从每个点开始搜索,会导致时间复杂度过高,可以逆向思考,只从边界出发,看看能到达哪些点,能到达的点标记为访问//从两个边界出发,用两个数组存各自能到达的节点,两个都到达的节点则是答案节点public class Main {static int n,m;static int[][] graph;static int [] dx={1,0,-1,0};static int [] dy={0,1,0,-1};public static void main(String[] args) {Scanner in = new Scanner(System.in);n = in.nextInt();m = in.nextInt();graph = new int[n][m];// 两个边界的visited数组int[][] first =new int[n][m];int[][] second=new int[n][m];for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {graph[i][j] = in.nextInt();}}//遍历行for (int i = 0; i <m ; i++) {dfs(first,0,i);dfs(second,n-1,i);}// 遍历列for (int i=0;i<n;i++){dfs(first,i,0);dfs(second,i,m-1);}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (second[i][j]==1&&first[i][j]==1) {System.out.println(i+" "+j);}}}}static void dfs( int [][]visited,int x,int y) {if (visited[x][y] == 1) {return;}visited[x][y] = 1;for (int i = 0; i < 4; i++) {int nextx = x + dx[i];int nexty = y + dy[i];// 若下一个节点的高度小于当前节点的高度,则continueif (nextx < 0 || nexty < 0 || nexty >= m || nextx >= n || graph[nextx][nexty] < graph[x][y]) {continue;}dfs(visited, nextx, nexty);}}}