private Direction decideMove(CurrentCell cell) {
        log(String.format("(%d, %d) [E:%s, W:%s, N:%s, S:%s]", cell.getX(), cell.getY(), cell.getEast(), cell.getWest(), cell.getNorth(), cell.getSouth()));
        
        RouteState eRouteState = RouteState.valueOf(cell.getEast());
        RouteState wRouteState = RouteState.valueOf(cell.getWest());
        RouteState nRouteState = RouteState.valueOf(cell.getNorth());
        RouteState sRouteState = RouteState.valueOf(cell.getSouth());
        
        Direction direction = null;
        
        if (eRouteState == RouteState.UNEXPLORED) {
            direction = Direction.EAST;
        }
        
        if (wRouteState == RouteState.UNEXPLORED) {
            if (direction != null) {
                pushJumpbackLocation(cell);
                return direction;
            }
            direction = Direction.WEST;
        }
        
        if (nRouteState == RouteState.UNEXPLORED) {
            if (direction != null) {
                pushJumpbackLocation(cell);
                return direction;
            }
            direction = Direction.NORTH;
        }
        
        if (sRouteState == RouteState.UNEXPLORED) {
            if (direction != null) {
                pushJumpbackLocation(cell);
                return direction;
            }
            direction = Direction.SOUTH;
        }
        return direction;
    }