#Alternating Maximum Weighted Matching

import networkx as nx


def find_alternating_maximum_weighted_matching(G, k):
    matching = nx.max_weight_matching(G, maxcardinality=True)
    matching_size = len(matching)

    if matching_size >= k:
        return matching
    else:
        return None


# Example usage
G = nx.Graph()
G.add_edge('A', 'B', weight=3)
G.add_edge('B', 'C', weight=2)
G.add_edge('C', 'D', weight=1)
G.add_edge('D', 'A', weight=4)

k = 2

matching = find_alternating_maximum_weighted_matching(G, k)
if matching is not None:
    print("Found alternating maximum weighted matching:", matching)
else:
    print("No alternating maximum weighted matching of size at least", k, "found.")

