from networkx import Graph


def Dtelekom():
    G = Graph()
    #		nodeNumber = 68
    #		objectNumber = 1000
    G.add_node("Node00")
    G.add_node("Node01")
    G.add_node("Node02")
    G.add_node("Node03")
    G.add_node("Node04")
    G.add_node("Node05")
    G.add_node("Node06")
    G.add_node("Node07")
    G.add_node("Node08")
    G.add_node("Node09")
    G.add_node("Node10")
    G.add_node("Node11")
    G.add_node("Node12")
    G.add_node("Node13")
    G.add_node("Node14")
    G.add_node("Node15")
    G.add_node("Node16")
    G.add_node("Node17")
    G.add_node("Node18")
    G.add_node("Node19")
    G.add_node("Node20")
    G.add_node("Node21")
    G.add_node("Node22")
    G.add_node("Node23")
    G.add_node("Node24")
    G.add_node("Node25")
    G.add_node("Node26")
    G.add_node("Node27")
    G.add_node("Node28")
    G.add_node("Node29")
    G.add_node("Node30")
    G.add_node("Node31")
    G.add_node("Node32")
    G.add_node("Node33")
    G.add_node("Node34")
    G.add_node("Node35")
    G.add_node("Node36")
    G.add_node("Node37")
    G.add_node("Node38")
    G.add_node("Node39")
    G.add_node("Node40")
    G.add_node("Node41")
    G.add_node("Node42")
    G.add_node("Node43")
    G.add_node("Node44")
    G.add_node("Node45")
    G.add_node("Node46")
    G.add_node("Node47")
    G.add_node("Node48")
    G.add_node("Node49")
    G.add_node("Node50")
    G.add_node("Node51")
    G.add_node("Node52")
    G.add_node("Node53")
    G.add_node("Node54")
    G.add_node("Node55")
    G.add_node("Node56")
    G.add_node("Node57")
    G.add_node("Node58")
    G.add_node("Node59")
    G.add_node("Node60")
    G.add_node("Node61")
    G.add_node("Node62")
    G.add_node("Node63")
    G.add_node("Node64")
    G.add_node("Node65")
    G.add_node("Node66")
    G.add_node("Node67")

    G.add_edge("Node67", "Node52")
    G.add_edge("Node67", "Node04")
    G.add_edge("Node66", "Node05")
    G.add_edge("Node66", "Node04")
    G.add_edge("Node65", "Node62")
    G.add_edge("Node65", "Node04")
    G.add_edge("Node65", "Node26")
    G.add_edge("Node64", "Node04")
    G.add_edge("Node64", "Node23")
    G.add_edge("Node63", "Node45")
    G.add_edge("Node63", "Node51")
    G.add_edge("Node62", "Node23")
    G.add_edge("Node62", "Node28")
    G.add_edge("Node61", "Node05")
    G.add_edge("Node61", "Node04")
    G.add_edge("Node61", "Node23")
    G.add_edge("Node61", "Node45")
    G.add_edge("Node60", "Node03")
    G.add_edge("Node60", "Node04")
    G.add_edge("Node60", "Node05")
    G.add_edge("Node60", "Node17")
    G.add_edge("Node59", "Node38")
    G.add_edge("Node59", "Node37")
    G.add_edge("Node59", "Node47")
    G.add_edge("Node59", "Node42")
    G.add_edge("Node59", "Node58")
    G.add_edge("Node59", "Node45")
    G.add_edge("Node59", "Node40")
    G.add_edge("Node59", "Node23")
    G.add_edge("Node59", "Node28")
    G.add_edge("Node59", "Node27")
    G.add_edge("Node59", "Node09")
    G.add_edge("Node58", "Node45")
    G.add_edge("Node58", "Node05")
    G.add_edge("Node58", "Node04")
    G.add_edge("Node58", "Node03")
    G.add_edge("Node58", "Node01")
    G.add_edge("Node57", "Node05")
    G.add_edge("Node57", "Node04")
    G.add_edge("Node57", "Node02")
    G.add_edge("Node56", "Node23")
    G.add_edge("Node56", "Node09")
    G.add_edge("Node56", "Node06")
    G.add_edge("Node56", "Node05")
    G.add_edge("Node56", "Node04")
    G.add_edge("Node56", "Node03")
    G.add_edge("Node56", "Node01")
    G.add_edge("Node55", "Node40")
    G.add_edge("Node55", "Node09")
    G.add_edge("Node55", "Node08")
    G.add_edge("Node55", "Node06")
    G.add_edge("Node55", "Node05")
    G.add_edge("Node55", "Node03")
    G.add_edge("Node55", "Node01")
    G.add_edge("Node54", "Node42")
    G.add_edge("Node54", "Node06")
    G.add_edge("Node54", "Node05")
    G.add_edge("Node54", "Node04")
    G.add_edge("Node54", "Node03")
    G.add_edge("Node54", "Node01")
    G.add_edge("Node53", "Node51")
    G.add_edge("Node53", "Node45")
    G.add_edge("Node53", "Node23")
    G.add_edge("Node53", "Node09")
    G.add_edge("Node53", "Node05")
    G.add_edge("Node52", "Node09")
    G.add_edge("Node52", "Node05")
    G.add_edge("Node52", "Node04")
    G.add_edge("Node52", "Node03")
    G.add_edge("Node52", "Node01")
    G.add_edge("Node51", "Node48")
    G.add_edge("Node51", "Node45")
    G.add_edge("Node51", "Node27")
    G.add_edge("Node51", "Node23")
    G.add_edge("Node51", "Node05")
    G.add_edge("Node50", "Node05")
    G.add_edge("Node50", "Node04")
    G.add_edge("Node50", "Node03")
    G.add_edge("Node50", "Node02")
    G.add_edge("Node50", "Node01")
    G.add_edge("Node49", "Node23")
    G.add_edge("Node49", "Node05")
    G.add_edge("Node49", "Node04")
    G.add_edge("Node49", "Node03")
    G.add_edge("Node49", "Node01")
    G.add_edge("Node48", "Node05")
    G.add_edge("Node48", "Node04")
    G.add_edge("Node48", "Node03")
    G.add_edge("Node48", "Node01")
    G.add_edge("Node47", "Node06")
    G.add_edge("Node47", "Node01")
    G.add_edge("Node46", "Node40")
    G.add_edge("Node46", "Node05")
    G.add_edge("Node45", "Node48")
    G.add_edge("Node45", "Node04")
    G.add_edge("Node45", "Node03")
    G.add_edge("Node45", "Node01")
    G.add_edge("Node44", "Node06")
    G.add_edge("Node44", "Node04")
    G.add_edge("Node44", "Node03")
    G.add_edge("Node44", "Node02")
    G.add_edge("Node44", "Node01")
    G.add_edge("Node43", "Node26")
    G.add_edge("Node43", "Node10")
    G.add_edge("Node43", "Node06")
    G.add_edge("Node43", "Node05")
    G.add_edge("Node43", "Node04")
    G.add_edge("Node43", "Node01")
    G.add_edge("Node42", "Node40")
    G.add_edge("Node42", "Node05")
    G.add_edge("Node42", "Node04")
    G.add_edge("Node42", "Node03")
    G.add_edge("Node42", "Node01")
    G.add_edge("Node41", "Node31")
    G.add_edge("Node41", "Node05")
    G.add_edge("Node41", "Node04")
    G.add_edge("Node41", "Node03")
    G.add_edge("Node41", "Node01")
    G.add_edge("Node40", "Node23")
    G.add_edge("Node40", "Node09")
    G.add_edge("Node40", "Node08")
    G.add_edge("Node40", "Node04")
    G.add_edge("Node40", "Node03")
    G.add_edge("Node40", "Node01")
    G.add_edge("Node39", "Node19")
    G.add_edge("Node39", "Node17")
    G.add_edge("Node39", "Node06")
    G.add_edge("Node39", "Node01")
    G.add_edge("Node38", "Node23")
    G.add_edge("Node38", "Node06")
    G.add_edge("Node38", "Node05")
    G.add_edge("Node38", "Node04")
    G.add_edge("Node38", "Node01")
    G.add_edge("Node37", "Node23")
    G.add_edge("Node36", "Node06")
    G.add_edge("Node36", "Node05")
    G.add_edge("Node36", "Node03")
    G.add_edge("Node36", "Node01")
    G.add_edge("Node35", "Node05")
    G.add_edge("Node35", "Node04")
    G.add_edge("Node35", "Node03")
    G.add_edge("Node35", "Node01")
    G.add_edge("Node34", "Node26")
    G.add_edge("Node34", "Node23")
    G.add_edge("Node34", "Node05")
    G.add_edge("Node34", "Node04")
    G.add_edge("Node34", "Node01")
    G.add_edge("Node33", "Node23")
    G.add_edge("Node33", "Node18")
    G.add_edge("Node33", "Node15")
    G.add_edge("Node33", "Node09")
    G.add_edge("Node33", "Node03")
    G.add_edge("Node32", "Node06")
    G.add_edge("Node32", "Node05")
    G.add_edge("Node32", "Node04")
    G.add_edge("Node32", "Node03")
    G.add_edge("Node32", "Node02")
    G.add_edge("Node32", "Node01")
    G.add_edge("Node31", "Node04")
    G.add_edge("Node31", "Node03")
    G.add_edge("Node30", "Node06")
    G.add_edge("Node30", "Node05")
    G.add_edge("Node30", "Node04")
    G.add_edge("Node30", "Node03")
    G.add_edge("Node30", "Node01")
    G.add_edge("Node29", "Node26")
    G.add_edge("Node29", "Node06")
    G.add_edge("Node29", "Node05")
    G.add_edge("Node29", "Node04")
    G.add_edge("Node29", "Node03")
    G.add_edge("Node29", "Node01")
    G.add_edge("Node28", "Node06")
    G.add_edge("Node28", "Node05")
    G.add_edge("Node28", "Node04")
    G.add_edge("Node28", "Node03")
    G.add_edge("Node28", "Node01")
    G.add_edge("Node27", "Node05")
    G.add_edge("Node27", "Node03")
    G.add_edge("Node26", "Node12")
    G.add_edge("Node26", "Node06")
    G.add_edge("Node26", "Node05")
    G.add_edge("Node26", "Node02")
    G.add_edge("Node25", "Node06")
    G.add_edge("Node25", "Node05")
    G.add_edge("Node25", "Node01")
    G.add_edge("Node24", "Node23")
    G.add_edge("Node24", "Node06")
    G.add_edge("Node24", "Node05")
    G.add_edge("Node24", "Node04")
    G.add_edge("Node24", "Node03")
    G.add_edge("Node24", "Node01")
    G.add_edge("Node23", "Node06")
    G.add_edge("Node23", "Node05")
    G.add_edge("Node22", "Node06")
    G.add_edge("Node22", "Node05")
    G.add_edge("Node21", "Node06")
    G.add_edge("Node21", "Node05")
    G.add_edge("Node21", "Node04")
    G.add_edge("Node21", "Node03")
    G.add_edge("Node21", "Node01")
    G.add_edge("Node20", "Node06")
    G.add_edge("Node20", "Node05")
    G.add_edge("Node20", "Node04")
    G.add_edge("Node20", "Node03")
    G.add_edge("Node20", "Node02")
    G.add_edge("Node20", "Node01")
    G.add_edge("Node19", "Node17")
    G.add_edge("Node19", "Node06")
    G.add_edge("Node19", "Node05")
    G.add_edge("Node18", "Node04")
    G.add_edge("Node18", "Node03")
    G.add_edge("Node18", "Node01")
    G.add_edge("Node17", "Node01")
    G.add_edge("Node16", "Node05")
    G.add_edge("Node16", "Node04")
    G.add_edge("Node16", "Node03")
    G.add_edge("Node16", "Node01")
    G.add_edge("Node15", "Node11")
    G.add_edge("Node15", "Node09")
    G.add_edge("Node15", "Node06")
    G.add_edge("Node15", "Node05")
    G.add_edge("Node15", "Node04")
    G.add_edge("Node14", "Node04")
    G.add_edge("Node14", "Node03")
    G.add_edge("Node14", "Node01")
    G.add_edge("Node13", "Node06")
    G.add_edge("Node13", "Node04")
    G.add_edge("Node13", "Node03")
    G.add_edge("Node13", "Node02")
    G.add_edge("Node12", "Node05")
    G.add_edge("Node12", "Node04")
    G.add_edge("Node11", "Node06")
    G.add_edge("Node11", "Node05")
    G.add_edge("Node11", "Node04")
    G.add_edge("Node11", "Node02")
    G.add_edge("Node11", "Node01")
    G.add_edge("Node10", "Node06")
    G.add_edge("Node10", "Node04")
    G.add_edge("Node10", "Node03")
    G.add_edge("Node10", "Node01")
    G.add_edge("Node09", "Node06")
    G.add_edge("Node09", "Node05")
    G.add_edge("Node09", "Node04")
    G.add_edge("Node09", "Node03")
    G.add_edge("Node09", "Node01")
    G.add_edge("Node08", "Node06")
    G.add_edge("Node08", "Node04")
    G.add_edge("Node08", "Node03")
    G.add_edge("Node07", "Node06")
    G.add_edge("Node07", "Node05")
    G.add_edge("Node07", "Node04")
    G.add_edge("Node07", "Node03")
    G.add_edge("Node07", "Node01")
    G.add_edge("Node06", "Node05")
    G.add_edge("Node06", "Node04")
    G.add_edge("Node06", "Node03")
    G.add_edge("Node06", "Node01")
    G.add_edge("Node05", "Node04")
    G.add_edge("Node05", "Node03")
    G.add_edge("Node05", "Node02")
    G.add_edge("Node05", "Node01")
    G.add_edge("Node04", "Node03")
    G.add_edge("Node04", "Node02")
    G.add_edge("Node04", "Node01")
    G.add_edge("Node03", "Node02")
    G.add_edge("Node03", "Node01")
    G.add_edge("Node02", "Node01")
    G.add_edge("Node00", "Node01")
    G.add_edge("Node00", "Node02")
    G.add_edge("Node00", "Node03")
    G.add_edge("Node00", "Node04")
    G.add_edge("Node00", "Node05")
    G.add_edge("Node00", "Node06")
    return G


def Abilene():
    # nodeNumber=9
    # objectNumber=2000
    G = Graph()

    G.add_node("NEWY")
    G.add_node("WASH")
    G.add_node("CHIC")
    G.add_node("ATLA")
    G.add_node("HOUS")
    G.add_node("KANS")
    G.add_node("SALT")
    G.add_node("LOSA")
    G.add_node("SEAT")

    G.add_edge("NEWY", "WASH")
    G.add_edge("NEWY", "CHIC")
    G.add_edge("CHIC", "WASH")
    G.add_edge("ATLA", "WASH")
    G.add_edge("ATLA", "CHIC")
    G.add_edge("ATLA", "HOUS")
    G.add_edge("KANS", "CHIC")
    G.add_edge("KANS", "HOUS")
    G.add_edge("KANS", "SALT")
    G.add_edge("LOSA", "HOUS")
    G.add_edge("LOSA", "SALT")
    G.add_edge("LOSA", "SEAT")
    G.add_edge("SALT", "SEAT")
    return G


def ServiceNetwork():
    G = Graph()
    # nodeNumber=8
    # objectNumber=2000

    G.add_node("CHAIN1")
    G.add_node("CHAIN2")
    G.add_node("CHAIN3")
    G.add_node("CHAIN4")
    G.add_node("CONSUMER1")
    G.add_node("CONSUMER2")
    G.add_node("CONSUMER3")
    G.add_node("CONSUMER4")

    G.add_edge("CHAIN1", "CHAIN2")
    G.add_edge("CHAIN3", "CHAIN2")
    G.add_edge("CHAIN3", "CHAIN4")
    G.add_edge("CHAIN4", "CONSUMER1")
    G.add_edge("CHAIN4", "CONSUMER2")
    G.add_edge("CHAIN4", "CONSUMER3")
    G.add_edge("CHAIN4", "CONSUMER4")
    return G


def GEANT():
    G = Graph()
    # nodeNumber=22
    # objectNumber=2000

    G.add_node("node0")
    G.add_node("node1")
    G.add_node("node2")
    G.add_node("node3")
    G.add_node("node4")
    G.add_node("node5")
    G.add_node("node6")
    G.add_node("node7")
    G.add_node("node8")
    G.add_node("node9")
    G.add_node("nodeA")
    G.add_node("nodeB")
    G.add_node("nodeC")
    G.add_node("nodeD")
    G.add_node("nodeE")
    G.add_node("nodeF")
    G.add_node("nodeG")
    G.add_node("nodeH")
    G.add_node("nodeI")
    G.add_node("nodeJ")
    G.add_node("nodeK")
    G.add_node("nodeL")

    G.add_edge("node0", "node1")
    G.add_edge("node0", "nodeL")
    G.add_edge("node1", "node2")
    G.add_edge("node1", "node3")
    G.add_edge("node1", "nodeF")
    G.add_edge("node2", "node3")
    G.add_edge("node3", "nodeC")
    G.add_edge("node3", "node4")
    G.add_edge("node4", "nodeL")
    G.add_edge("node4", "nodeI")
    G.add_edge("node4", "node7")
    G.add_edge("node5", "node6")
    G.add_edge("node5", "nodeE")
    G.add_edge("node6", "node7")
    G.add_edge("node7", "node8")
    G.add_edge("node8", "node9")
    G.add_edge("node9", "nodeA")
    G.add_edge("node9", "nodeC")
    G.add_edge("nodeA", "nodeB")
    G.add_edge("nodeB", "nodeC")
    G.add_edge("nodeC", "nodeD")
    G.add_edge("nodeC", "nodeF")
    G.add_edge("nodeD", "nodeE")
    G.add_edge("nodeE", "nodeF")
    G.add_edge("nodeE", "nodeG")
    G.add_edge("nodeE", "nodeL")
    G.add_edge("nodeF", "nodeH")
    G.add_edge("nodeG", "nodeH")
    G.add_edge("nodeH", "nodeI")
    G.add_edge("nodeI", "nodeJ")
    G.add_edge("nodeI", "nodeK")
    G.add_edge("nodeJ", "nodeK")
    G.add_edge("nodeK", "nodeL")
    return G
