private void change_flow(int u, int v, int value, boolean yield, String message){
        F[u][v] = value;
        
        Node u_node = index[u];
        Node v_node = index[v];
        
        Edge e = get_edge(u_node, v_node);
        if(e!=null){
            e.set_flow(value);
            listener.change_flow(e, value);
            if(!message.equals("")){
                listener.print_message(message);
            }
            if(yield){
                listener.yield();
            }
        }
        else{
            Edge opposite = get_edge(v_node, u_node);
            if(opposite != null){
                listener.print_message("Change flow on virtual edge " + u_node.get_id() + "->" + v_node.get_id());
                if(yield){
                    listener.yield();
                }
            }
        }

    }