package main import ( "bufio" "os" "strconv" "fmt" ) var s = bufio.NewScanner(os.Stdin) func next() string { s.Split(bufio.ScanWords) s.Scan() return s.Text() } func nextLine() string { s.Split(bufio.ScanLines) s.Scan() if nil != s.Err() { panic(s.Err()) } return s.Text() } func nextInt() int { i, e := strconv.Atoi(next()) if e != nil { panic(e) } return i } func max(a int, b int) int { if a < b { return b } return a } func solve(S []string, x int, y int) bool { if y == 0 && x <= 0 { return false } checked := make([][]bool, H) for i := 0; i < len(S); i++ { checked[i] = make([]bool, W) } count := 0 for j := 0; j < H; j++ { for i := 0; i < W; i++ { if checked[j][i] || S[j][i] == '.' { continue } if 0 <= i+x && i+x < W && 0 <= j+y && j+y < H { if checked[j + y][i + x] { return false } if S[j+y][i+x] == '.' { return false } checked[j][i] = true checked[j+y][i+x] = true count++ }else { return false } } } if count > 0 { println(count, x, y) return true } return false } var H int var W int func main() { H = nextInt() W = nextInt() S := make([]string, H) for i := 0; i < H; i++ { S[i] = nextLine() } for i := -W + 1; i < W; i++ { for j := 0; j < H; j++ { if solve(S, i, j) { fmt.Println("YES") return } } } fmt.Println("NO") }