private Action moveToOrientation(
      Robot robot, Orientation firstOrientation, Orientation secondOrientation) {

    Direction preferedDirection = getPreferedDirection(firstOrientation, secondOrientation);

    Orientation currentOrientation = robot.getCurrentOrientation();
    //		System.out.println("Current Orientation = " + currentOrientation.toString());
    //		System.out.println("First Orientation = " + firstOrientation.toString());
    //		System.out.println("Second Orientation = " + secondOrientation.toString());

    if (currentOrientation.equals(firstOrientation)) {

      return moveTowardsDirectionInOrder(
          Direction.AHEAD, preferedDirection, oppoDirection(preferedDirection), robot);
    } else if (currentOrientation.equals(secondOrientation)) {

      return moveTowardsDirectionInOrder(
          oppoDirection(preferedDirection), Direction.AHEAD, preferedDirection, robot);
    } else if (currentOrientation.toOppsite().equals(firstOrientation)) {

      return moveTowardsDirectionInOrder(
          oppoDirection(preferedDirection), Direction.AHEAD, preferedDirection, robot);
    } else if (currentOrientation.toOppsite().equals(secondOrientation)) {

      return moveTowardsDirectionInOrder(
          preferedDirection, Direction.AHEAD, oppoDirection(preferedDirection), robot);
    }
    assert (false) : "Should not reach here. No other circumstance";
    return null;
  }
  private Action scanArenaColByCol(Robot robot) {

    Action actionForTentativeTurn = actionForTentiveTurn(robot);
    if (actionForTentativeTurn != null) return actionForTentativeTurn;

    if (robotOnArenaEdge(robot, headingOrientation)) {
      Orientation current = robot.getCurrentOrientation();
      if (!current.toOppsite().equals(headingOrientation)) {
        return Action.TURN_LEFT;
      } else {
        headingOrientation = headingOrientation.toOppsite();
        trackColID += robot.getDiameterInCellNum();

        // Whole arena has been explored
        if (trackColID >= this.exploredMap.getColumnCount()) return null;
      }
    }

    int currentSouthWestColID = robot.getSouthWestBlock().getColID();
    if (currentSouthWestColID < trackColID) {
      return moveToOrientation(robot, Orientation.EAST, headingOrientation);
    } else if (currentSouthWestColID == trackColID) {
      return moveToOrientation(robot, headingOrientation, Orientation.EAST);
    } else {
      // currentSouthWestColID > trackColID
      return moveToOrientation(robot, Orientation.WEST, headingOrientation);
    }
  }