public static Position moveFromExplicitMoveString(Position pos, String move) {
		//System.out.println("Get move from explicit: " + move);
		//handle king side castle:
		if(move.equals("O-O") || move.equals("O-O+")) {
			return ChessMover.moveWeird(pos, Position.KING_SIDE_CASTLE);
			
		//handle queen side castle:
		} else if(move.equals("O-O-O") || move.equals("O-O-O+")) {
			return ChessMover.moveWeird(pos, Position.QUEEN_SIDE_CASTLE);
		
		//Handle promotion:
		} else if(move.contains("=")) {
			String piece = move.substring(move.indexOf("=") + 1, move.indexOf("=") + 2);
			if(pos.isWhiteTurn()) {
				piece = Position.WHITE + piece;
			} else {
				piece = Position.BLACK + piece;
			}
			return ChessMover.movePromote(pos, move.charAt(0), move.charAt(1) - '0', move.charAt(3), move.charAt(4) - '0', piece);
		
		//handle normal move:
		} else {
			
			int startPosofCord = 0;
			for(startPosofCord=0; startPosofCord<move.length(); startPosofCord++) {
				if(move.charAt(startPosofCord) >='a' && move.charAt(startPosofCord) <='h') {
					break;
				}
			}
			return ChessMover.moveNormal(pos, move.charAt(startPosofCord), move.charAt(startPosofCord + 1) - '0', move.charAt(startPosofCord + 3), move.charAt(startPosofCord + 4) - '0');
		}
	}