public int fillCell(Turn turn, boolean changeState) throws CellIsFilledException, CellIsEmptyException, IncorrectCellValueException {
		Cell selectedCell = getCellByIndex(turn.row, turn.column);
		int gainedPoints = 0;
		int modulo = 0;
		
		try {
			if(selectedCell == null)
				throw new IndexOutOfBoundsException("Cell row and/or column are incorrect\n");
			if(selectedCell.isFilled())
				throw new CellIsFilledException("Cell is already filled\n");
		}
		catch(IndexOutOfBoundsException | CellIsFilledException e) {
			System.out.println(e.getMessage());
		}
		
		if(changeState)
			selectedCell.setValue(turn.value);
		
		ArrayList<Cell> adjacentCells = getAdjacentCells(selectedCell, turn.row, turn.column);
		for(Cell cell : adjacentCells)
			if(cell.isFilled()) {
				modulo = turn.value % cell.getValue();
				gainedPoints += modulo;
				if((modulo == 0) && changeState)
					cell.divide(turn.value);				
			}
		
		return gainedPoints;
	}