Problem:
Score : 100 points

Problem Statement

There is a grid with H rows and W columns.

The square at the i-th row and j-th column contains a string S_{i,j} of length 5.

The rows are labeled with the numbers from 1 through H, and the columns are labeled with the uppercase English letters from A through the W-th letter of the alphabet.

Exactly one of the squares in the grid contains the string snuke. Find this square and report its location.

For example, the square at the 6-th row and 8-th column should be reported as H6.

Constraints

1≦H, W≦26

The length of S_{i,j} is 5.

S_{i,j} consists of lowercase English letters (a-z).

Exactly one of the given strings is equal to snuke.

Input

The input is given from Standard Input in the following format:

H W
S_{1,1} S_{1,2} ... S_{1,W}
S_{2,1} S_{2,2} ... S_{2,W}
:
S_{H,1} S_{H,2} ... S_{H,W}

Output

Print the labels of the row and the column of the square containing the string snuke, with no space inbetween.

Sample Input 1

15 10
snake snake snake snake snake snake snake snake snake snake
snake snake snake snake snake snake snake snake snake snake
snake snake snake snake snake snake snake snake snake snake
snake snake snake snake snake snake snake snake snake snake
snake snake snake snake snake snake snake snake snake snake
snake snake snake snake snake snake snake snuke snake snake
snake snake snake snake snake snake snake snake snake snake
snake snake snake snake snake snake snake snake snake snake
snake snake snake snake snake snake snake snake snake snake
snake snake snake snake snake snake snake snake snake snake
snake snake snake snake snake snake snake snake snake snake
snake snake snake snake snake snake snake snake snake snake
snake snake snake snake snake snake snake snake snake snake
snake snake snake snake snake snake snake snake snake snake
snake snake snake snake snake snake snake snake snake snake

Sample Output 1

H6

Sample Input 2

1 1
snuke

Sample Output 2

A1

Solution in Go (1.6) (judge verdict: Wrong Answer)

package main

import (
	"bytes"
	"fmt"
	"io"
	"os"
	"strings"
)

func main() {
	if false {
		test()
	} else {
		solve(os.Stdin, os.Stdout)
	}
}

func solve(r io.Reader, w io.Writer) {
	var n int // number of participants
	var m int // number of languages
	fmt.Fscanln(r, &n, &m)
	// planet: paticipant -> lang -> bool
	planet := make(map[int]map[int]bool)
	for i := 0; i < n; i++ {
		planet[i] = make(map[int]bool)
		var langs int
		fmt.Fscan(r, &langs)
		for j := 0; j < langs; j++ {
			var lang int
			fmt.Fscan(r, &lang)
			planet[i][lang] = true
		}
	}

	if communicatable(planet, n) {
		fmt.Fprintln(w, "YES")
	} else {
		fmt.Fprintln(w, "NO")
	}
}

func communicatable(planet map[int]map[int]bool, n int) bool {
	// p1 -> p2 -> bool
	table := make(map[int]map[int]bool)
	for i := 0; i < n; i++ {
		table[i] = make(map[int]bool)
	}

	for p1, langs1 := range planet {
	P:
		for p2, langs2 := range planet {
			if !(p1 < p2) {
				continue P
			}
			for l2 := range langs2 {
				if _, ok := langs1[l2]; ok {
					table[p1][p2] = true
					table[p2][p1] = true
				}
			}
		}
	}

P1:
	for i := 1; i < n; i++ {
		for j := 0; j < i; j++ {
			if _, ok := table[i][j]; ok {
				continue P1
			}
		}
		return false
	}
	return true

}

func canCommunicateWithX(planet map[int]map[int]bool, table map[int]map[int]bool) (bool, int) {
	newtable := make(map[int]map[int]bool)
	for i := 0; i < len(table); i++ {
		newtable[i] = make(map[int]bool)
	}
	new := 0
	end := true
	for p1 := range planet {
	P:
		for p2 := range planet {
			if !(p1 < p2) {
				continue P
			}
			if _, ok := table[p1][p2]; ok {
				continue P
			}
			for px1 := range table[p1] {
				if _, ok := table[p2][px1]; ok {
					new++
					newtable[p1][p2] = true
					continue P
				}
			}
			for px2 := range table[p2] {
				if _, ok := table[p1][px2]; ok {
					new++
					newtable[p1][p2] = true
					continue P
				}
			}
			end = false
		}
	}
	// update table
	for p1, ps := range newtable {
		for p2 := range ps {
			table[p1][p2] = true
			table[p2][p1] = true
		}
	}
	return end, new
}

func genRange(i, j int) []int {
	rs := make([]int, 0, j-i)
	for ; i < j; i++ {
		rs = append(rs, i)
	}
	return rs
}

func test() {
	tests := []struct {
		in   string
		want string
	}{
		{
			in: `4 6
3 1 2 3
2 4 2
2 4 6
1 6`,
			want: `YES
`,
		},
		{
			in: `4 4
2 1 2
2 1 2
1 3
2 4 3`,
			want: `NO
`,
		},
	}
	for i, tt := range tests {
		fmt.Printf("=== TEST %d\n", i)
		buf := new(bytes.Buffer)
		solve(strings.NewReader(tt.in), buf)
		if got := buf.String(); got != tt.want {
			fmt.Printf("%d: got %v, want %v\n", i, got, tt.want)
		}
	}
}