def find_lcs(first_sentence_tokens: tuple, second_sentence_tokens: tuple, lcs_matrix: list) -> tuple:
    """
    Finds the longest common subsequence itself using the Needleman–Wunsch algorithm
    :param first_sentence_tokens: a tuple of tokens
    :param second_sentence_tokens: a tuple of tokens
    :param lcs_matrix: a filled lcs matrix
    :return: the longest common subsequence
    """

    checking_first_sentence = (not isinstance(first_sentence_tokens, tuple) or
                               None in first_sentence_tokens)
    checking_second_sentence = (not isinstance(second_sentence_tokens, tuple) or
                                None in second_sentence_tokens)
    checking_lcs_matrix = (not lcs_matrix or
                               not isinstance(lcs_matrix, list))
    if checking_lcs_matrix or checking_first_sentence or checking_second_sentence:
        return ()
    length_1 = len(first_sentence_tokens)
    length_2 = len(second_sentence_tokens)
    if len(lcs_matrix) != length_1 or len(lcs_matrix[0]) != length_2:
        return ()
    if lcs_matrix[0][0] != 0 and lcs_matrix[0][0] != 1:
        return ()
    lcs_list = []
    row = len(first_sentence_tokens) - 1
    column = len(second_sentence_tokens) - 1
    if row < 0:
        row = 0
    elif column < 0:
        column = 0
    while row >= 0 and column >= 0:
        if first_sentence_tokens[row] == second_sentence_tokens[column]:
            lcs_list.append(second_sentence_tokens[column])
            row -= 1
            column -= 1
        else:
            if lcs_matrix[row - 1][column] > lcs_matrix[row][column - 1] or column == 0:
                row -= 1
            else:
                column -= 1
    return tuple(reversed(lcs_list))