def process_small_clause(graph, cycle, cut=True):
    """
    Match a cycle if there is a small clause relationship: verb with outgoing edge ARG3/H to a preposition node, the
    preposition node has an outgoing edge ARG1/NEQ, and
    1) an outgoing edge ARG2/NEQ, or
    2) an outgoing edge ARG2/EQ to a noun;
    ARG2/NEQ or ARG2/EQ edge is removed if cut is set to True.
    :param graph: DmrsGraph object
    :param cycle: Set of Node objects in the cycle
    :param cut: If True and cycle is matched, the cycle is broken by removing a target edge
    :return: True if cycle is matched, otherwise False
    """

    verb_nodes = [node for node in cycle if node.pos == 'v']

    if len(verb_nodes) == 0:
        return False

    for verb_node in verb_nodes:
        outgoing_edges = [edge for edge in graph.get_outgoing_node_edges(verb_node) if edge.to_node in cycle]
        outgoing_labels = dict((edge.label, edge.to_node) for edge in outgoing_edges)

        if 'ARG3_H' not in outgoing_labels:
            continue

        prep_node = outgoing_labels['ARG3_H']

        if prep_node.pos != 'p':
            continue

        prep_outgoing_labels = [edge.label for edge in graph.get_outgoing_node_edges(prep_node) if edge.to_node in cycle]

        if 'ARG1_NEQ' not in prep_outgoing_labels:
            continue

        if 'ARG2_NEQ' in outgoing_labels:

            if cut:
                arg2_neq_edge = [edge for edge in outgoing_edges if edge.label == 'ARG2_NEQ'][0]
                graph.edges.remove(arg2_neq_edge)

            return True

        if 'ARG2_EQ' in outgoing_labels and outgoing_labels['ARG2_EQ'].pos == 'n':

            if cut:
                arg2_eq_edge = [edge for edge in outgoing_edges if edge.label == 'ARG2_EQ'][0]
                graph.edges.remove(arg2_eq_edge)

            return True

    return False