def dvosmerni_zemljevid(zemljevid):
    nov_zemljevid = {}
    for (a, b), vescine in zemljevid.items():
        nov_zemljevid[(a, b)] = nov_zemljevid[(b, a)] = set(vescine.split())
    return nov_zemljevid


def mozna_pot(pot, zemljevid):
    z = dvosmerni_zemljevid(zemljevid)
    for k in zip(pot, pot[1:]):
        if not z.__contains__(k):
            return False
    return True


def potrebne_vescine(pot, zemljevid):
    z = dvosmerni_zemljevid(zemljevid)
    vescine = set()
    for k in zip(pot, pot[1:]):
        vescine = vescine.union(set(z[k]))
    return vescine


def nepotrebne_vescine(pot, zemljevid, vescine):
    return vescine.difference(potrebne_vescine(pot, zemljevid))


def tocke_vescine(zemljevid, vescina):
    z = dvosmerni_zemljevid(zemljevid)
    tocke = set()
    for k, v in z.items():
        if v.__contains__(vescina):
            tocke.add(k[0])
    return "".join(sorted(tocke))


def koncna_tocka(pot, zemljevid, vescine):
    z = dvosmerni_zemljevid(zemljevid)
    for k in zip(pot, pot[1:]):
        if not z[k].issubset(vescine):
            return k[0], z[k].difference(vescine)
