import java.io.*;
import java.util.*;

public class moon_av implements Runnable {
	public static void main(String[] args) {
		new Thread(new moon_av()).start();
	}

	BufferedReader br;

	StringTokenizer in;

	PrintWriter out;

	public String nextToken() throws IOException {
		while (in == null || !in.hasMoreTokens()) {
			in = new StringTokenizer(br.readLine());
		}

		return in.nextToken();
	}

	public int nextInt() throws IOException {
		return Integer.parseInt(nextToken());
	}

	public long nextLong() throws IOException {
		return Long.parseLong(nextToken());
	}

	public double nextDouble() throws IOException {
		return Double.parseDouble(nextToken());
	}

	int MAXC = 10000;
	int R = 100;
	
	int[][] r;
	
	public int get(int x, int y){
		int w = r.length;
		int h = r[0].length;
		int rl = Math.min(r[x][y] - 1, y);
		int rr = Math.min(r[x][y] - 1, h - 1 - y);
		
		for (int i = y - 1; i >= y - rl; i--) {
			int px = r[x][i] - 1;
			int py = Math.abs(i - y);
			
			int rll = rl;
			while (px * px + py * py < rll){
				rll--;
			}
			if (rll < (y - i) || px < 0){
				rl = (y - i - 1);
				break;
			}
			rl = rll;
		}
		
		for (int i = y + 1; i <= y + rr; i++) {
			int px = r[x][i] - 1;
			int py = Math.abs(i - y);
			
			int rrr = rr;
			while (px * px + py * py < rrr){
				rrr--;
			}
			if (rrr < (i - y) || px < 0){
				rr = (i - y - 1);
				break;
			}
			
			rr = rrr;
		}
		
		return Math.min(rl, rr);
	} 
	
	public void solve() throws IOException {
		int h = nextInt();
		int w = nextInt();
		
		char[][] map = new char[w][];
		int count = 0;
		for (int i = 0; i < w; i++) {
			map[i] = nextToken().toCharArray();
			for (int j = 0; j < h; j++) {
				if (map[i][j] == '*') count++;
			}
		}
		
		int[][] rup = new int[w][h];
		for (int i = 0; i < h; i++) {
			if (map[0][i] == '*')
				rup[0][i] = 1;
		}
		
		for (int i = 1; i < w; i++) {
			for (int j = 0; j < h; j++) {
				if (map[i][j] == '*'){
					rup[i][j] = rup[i - 1][j] + 1;
				}
			}
		}
		
		int[][] rdown = new int[w][h];
		for (int i = 0; i < h; i++) {
			if (map[w - 1][i] == '*')
				rdown[w - 1][i] = 1;
		}
		
		for (int i = w - 2; i >= 0; i--) {
			for (int j = 0; j < h; j++) {
				if (map[i][j] == '*'){
					rdown[i][j] = rdown[i + 1][j] + 1;
				}
			}
		}
		
		r = new int[w][h];
		for (int i = 0; i < w; i++) {
			for (int j = 0; j < h; j++) {
				r[i][j] = Math.min(rup[i][j], rdown[i][j]);
			}
		}
		
		double cx = 0;
		double cy = 0;
		for (int i = 0; i < w; i++) {
			for (int j = 0; j < h; j++) {
				if (map[i][j] == '*'){
					cx += 1.0 * i / count;
					cy += 1.0 * j / count;
				}
			}
		}
		
		if (count < MAXC)
			R = 10000;
		
		int maxR = -1;
		int xm = 0;
		int ym = 0;
		for (int i = Math.max(0, (int)cx - R); i < Math.min(w, (int)cx + R); i++) {
			for (int j = Math.max(0, (int)cy - R); j < Math.min(h, (int)cy + R); j++) {
				if (map[i][j] == '*'){
					if (maxR < 0){
						xm = i;
						ym = j;
						maxR = 0;
					}
					
					int z = get(i, j);
					if (maxR < z){
						xm = i;
						ym = j;
						maxR = z;
					}
				}
			}
		}
		
		out.println(maxR);
		out.println((ym + 1) + " " + (xm + 1));
	}

	public void run() {
		try {
			br = new BufferedReader(new FileReader("moon.in"));
			out = new PrintWriter("moon.out");

			solve();

			out.close();
		} catch (IOException e) {
			e.printStackTrace();
			System.exit(1);
		}
	}
}
