// @author godmar import java.util.*; public class CarlsMazeGodmar { static int r, c, ex, ey; static char [][]b; record Pose(int x, int y, int dx, int dy) { boolean inField() { return 0 <= x && x < r && 0 <= y && y < c; } boolean isEmpty() { return b[x][y] == '0'; } Pose turnLeft() { return new Pose(x, y, -dy, dx); } Pose turnRight() { return new Pose(x, y, dy, -dx); } Pose moveForward() { return new Pose(x + dx, y + dy, dx, dy); } boolean canMoveForward() { var p = new Pose(x + dx, y + dy, dx, dy); return p.inField() && p.isEmpty(); } boolean isHome() { return x == ex && y == ey; } } public static void main(String []av) { var sc = new Scanner(System.in); r = sc.nextInt(); c = sc.nextInt(); var carl = new Pose(sc.nextInt()-1, sc.nextInt()-1, 0, 1); ex = sc.nextInt() - 1; ey = sc.nextInt() - 1; b = new char[r][]; for (int i = 0; i < r; i++) b[i] = sc.next().toCharArray(); var seen = new HashSet(); seen.add(carl); while (!carl.isHome()) { // While Carl is not yet in the destination square // If Carl can turn left by 90 degrees and face an empty square, // turn left 90 degrees and then move forward by one square. if (carl.turnLeft().canMoveForward()) { carl = carl.turnLeft().moveForward(); } else if (carl.canMoveForward()) { // Otherwise, if Carl can move forward by // one square, move forward by one square. carl = carl.moveForward(); } else { // Otherwise, turn right 90 degrees. carl = carl.turnRight(); } if (seen.contains(carl)) { System.out.println("0"); return; } seen.add(carl); } System.out.println("1"); } }