Program: 154385
Project: 154385
Buggy source:
/** 
 * Constructor function. Parses and stores input.
 * @param input The String input into stdin that this class has to parse and store.
 */
public Command(String input){
  String[] bits=input.split("String_Node_Str");
  if (bits[0].equals("String_Node_Str")) {
    if (bits.length == 2) {
      fileName=bits[1];
      this.type=CommandType.LOAD_GAME;
    }
 else {
      System.out.println("String_Node_Str");
      this.type=CommandType.INVALID;
    }
  }
 else   if (bits[0].equals("String_Node_Str")) {
    if (bits.length > 1) {
      for (int j=1; j < bits.length; j++) {
        Move temp=parseBit(bits[j]);
        if (temp != null) {
          moves.add(temp);
          this.type=CommandType.NEW_WITH_MOVES;
        }
 else {
          this.type=CommandType.INVALID;
          return;
        }
      }
    }
 else {
      this.type=CommandType.NEW_GAME;
    }
  }
 else   if (bits[0].equals("String_Node_Str")) {
    if (bits.length == 2) {
      fileName=bits[1];
      this.type=CommandType.SAVE_GAME;
    }
 else {
      System.out.println("String_Node_Str");
      this.type=CommandType.INVALID;
    }
  }
 else   if (bits[0].equals("String_Node_Str")) {
    this.type=CommandType.UNDO;
  }
 else   if (bits[0].equals("String_Node_Str")) {
    this.type=CommandType.REDO;
  }
 else   if (bits[0].equals("String_Node_Str")) {
    printHelp();
  }
 else {
    if (bits.length > 1) {
      for (int j=0; j < bits.length; j++) {
        Move temp=parseBit(bits[j]);
        if (temp != null) {
          moves.add(temp);
          this.type=CommandType.MOVES;
        }
 else {
          this.type=CommandType.INVALID;
          return;
        }
      }
    }
 else {
      Move temp=parseBit(bits[0]);
      if (temp != null) {
        moves.add(temp);
        this.type=CommandType.MOVE;
      }
 else {
        this.type=CommandType.INVALID;
        return;
      }
    }
  }
}

Fixed version (ground truth):
/** 
 * Constructor function. Parses and stores input.
 * @param input The String input into stdin that this class has to parse and store.
 */
public Command(String input){
  String[] bits=input.split("String_Node_Str");
  if (bits[0].equals("String_Node_Str")) {
    if (bits.length == 2) {
      fileName=bits[1];
      this.type=CommandType.LOAD_GAME;
    }
 else {
      System.out.println("String_Node_Str");
      this.type=CommandType.INVALID;
    }
  }
 else   if (bits[0].equals("String_Node_Str")) {
    if (bits.length > 1) {
      for (int j=1; j < bits.length; j++) {
        Move temp=parseBit(bits[j]);
        if (temp != null) {
          moves.add(temp);
          this.type=CommandType.NEW_WITH_MOVES;
        }
 else {
          this.type=CommandType.INVALID;
          return;
        }
      }
    }
 else {
      this.type=CommandType.NEW_GAME;
    }
  }
 else   if (bits[0].equals("String_Node_Str")) {
    if (bits.length == 2) {
      fileName=bits[1];
      this.type=CommandType.SAVE_GAME;
    }
 else {
      System.out.println("String_Node_Str");
      this.type=CommandType.INVALID;
    }
  }
 else   if (bits[0].equals("String_Node_Str")) {
    this.type=CommandType.UNDO;
  }
 else   if (bits[0].equals("String_Node_Str")) {
    this.type=CommandType.REDO;
  }
 else   if (bits[0].equals("String_Node_Str")) {
    printHelp();
    this.type=CommandType.HELP;
    return;
  }
 else {
    if (bits.length > 1) {
      for (int j=0; j < bits.length; j++) {
        Move temp=parseBit(bits[j]);
        if (temp != null) {
          moves.add(temp);
          this.type=CommandType.MOVES;
        }
 else {
          this.type=CommandType.INVALID;
          return;
        }
      }
    }
 else {
      Move temp=parseBit(bits[0]);
      if (temp != null) {
        moves.add(temp);
        this.type=CommandType.MOVE;
      }
 else {
        this.type=CommandType.INVALID;
        return;
      }
    }
  }
}