import java.util.*;
import java.io.*;
public class Main {
protected static String[][] matrix
; protected static int min = 9999;
// Java sun-jdk-1.7.
try (
String[] xy
= line.
split(" ",
-1);
int[] s = new int[]{0,0};
int[] g = new int[]{0,0};
int crow = 0;
while ((line = in.readLine()) != null) {
String[] row
= line.
replace("1",
"x").
split(" "); matrix[crow] = row;
int ccol = 0;
if ("s".equals(cell)) {
s = new int[]{ crow, ccol };
}
if ("g".equals(cell)) {
g = new int[]{ crow, ccol };
}
ccol++;
}
crow++;
//System.out.println(Arrays.toString(row));
}
add(s[1], s[0], 0);
}
//System.out.println("--------");
//for (String[] row : matrix) {
// System.out.println(Arrays.toString(row));
//}
System.
out.
println(min
== 9999 ? "Fail" : min
); }
static final void add(int x, int y, int count) {
try {
if ("0".equals(matrix[y][x]) || "s".equals(matrix[y][x])) {
if ("0".equals(matrix[y][x])) {
matrix
[y
][x
] = String.
valueOf(count
); }
if ("s".equals(matrix[y][x])) {
if (count != 0) {
return;
}
}
add(x+1,y+0,count+1);
add(x+0,y+1,count+1);
add(x-1,y-0,count+1);
add(x-0,y-1,count+1);
} else if ("g".equals(matrix[y][x])) {
// System.out.println(count);
min
= Math.
min(count, min
); } else {
int old
= Integer.
parseInt(matrix
[y
][x
]); if (old > count) {
matrix[y][x] = "0";
add(x,y,count);
}
return;
}
return;
}
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5pby4qOwoKcHVibGljIGNsYXNzIE1haW4gewoJcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmdbXVtdIG1hdHJpeDsKCXByb3RlY3RlZCBzdGF0aWMgaW50IG1pbiA9IDk5OTk7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgLy8gSmF2YSBzdW4tamRrLTEuNy4KICAgICAgICB0cnkgKAogICAgICAgICAgICBJbnB1dFN0cmVhbVJlYWRlciBpciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihTeXN0ZW0uaW4pOwogICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihpcikpIHsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbi5yZWFkTGluZSgpOwogICAgICAgICAgICAgICAgU3RyaW5nW10geHkgPSBsaW5lLnNwbGl0KCIgIiwtMSk7CiAgICAgICAgICAgICAgICBpbnQgeCA9IEludGVnZXIucGFyc2VJbnQoeHlbMF0pOwogICAgICAgICAgICAgICAgaW50IHkgPSBJbnRlZ2VyLnBhcnNlSW50KHh5WzFdKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBtYXRyaXggPSBuZXcgU3RyaW5nW3ldW3hdOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpbnRbXSBzID0gbmV3IGludFtdezAsMH07CiAgICAgICAgICAgICAgICBpbnRbXSBnID0gbmV3IGludFtdezAsMH07CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGludCBjcm93ID0gMDsKICAgICAgICAgICAgICAgIHdoaWxlICgobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSByb3cgPSBsaW5lLnJlcGxhY2UoIjEiLCAieCIpLnNwbGl0KCIgIik7CiAgICAgICAgICAgICAgICAgICAgbWF0cml4W2Nyb3ddID0gcm93OwogICAgICAgICAgICAgICAgICAgIGludCBjY29sID0gMDsKICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBjZWxsIDogcm93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgicyIuZXF1YWxzKGNlbGwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gbmV3IGludFtdeyBjcm93LCBjY29sIH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCJnIi5lcXVhbHMoY2VsbCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBuZXcgaW50W117IGNyb3csIGNjb2wgfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBjY29sKys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGNyb3crKzsKCSAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihBcnJheXMudG9TdHJpbmcocm93KSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBhZGQoc1sxXSwgc1swXSwgMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tIik7CiAgICAgICAgICAgIC8vZm9yIChTdHJpbmdbXSByb3cgOiBtYXRyaXgpIHsKICAgICAgICAgICAgLy8gIFN5c3RlbS5vdXQucHJpbnRsbihBcnJheXMudG9TdHJpbmcocm93KSk7CiAgICAgICAgICAgIC8vfQogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obWluID09IDk5OTkgPyAiRmFpbCIgOiBtaW4pOwogICAgfQogICAgCiAgICBzdGF0aWMgZmluYWwgdm9pZCBhZGQoaW50IHgsIGludCB5LCBpbnQgY291bnQpIHsKICAgIAl0cnkgewogICAgCQlpZiAoIjAiLmVxdWFscyhtYXRyaXhbeV1beF0pIHx8ICJzIi5lcXVhbHMobWF0cml4W3ldW3hdKSkgewogICAgCQkJaWYgKCIwIi5lcXVhbHMobWF0cml4W3ldW3hdKSkgewoJICAgIAkJIAltYXRyaXhbeV1beF0gPSBTdHJpbmcudmFsdWVPZihjb3VudCk7CiAgICAJCQl9CiAgICAJCQlpZiAoInMiLmVxdWFscyhtYXRyaXhbeV1beF0pKSB7CiAgICAJCQkJaWYgKGNvdW50ICE9IDApIHsKICAgIAkJCQkJcmV0dXJuOwogICAgCQkJCX0KICAgIAkJCX0KCSAgICAJCWFkZCh4KzEseSswLGNvdW50KzEpOwoJICAgIAkJYWRkKHgrMCx5KzEsY291bnQrMSk7CgkgICAgCQlhZGQoeC0xLHktMCxjb3VudCsxKTsKCSAgICAJCWFkZCh4LTAseS0xLGNvdW50KzEpOwogICAgCQl9IGVsc2UgaWYgKCJnIi5lcXVhbHMobWF0cml4W3ldW3hdKSkgewogICAgCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGNvdW50KTsKICAgIAkJCW1pbiA9IE1hdGgubWluKGNvdW50LCBtaW4pOwogICAgCQl9IGVsc2UgewogICAgCQkJaW50IG9sZCA9IEludGVnZXIucGFyc2VJbnQobWF0cml4W3ldW3hdKTsKICAgIAkJCWlmIChvbGQgPiBjb3VudCkgewogICAgCQkJCW1hdHJpeFt5XVt4XSA9ICIwIjsKICAgIAkJCQlhZGQoeCx5LGNvdW50KTsKICAgIAkJCX0KICAgIAkJCXJldHVybjsKICAgIAkJfQogICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAJCXJldHVybjsKICAgIAl9CiAgICB9Cn0=