class Szo:
    def __init__(self, szo=''):
        self.szo = szo
        self.hossz = len(szo)

    def __str__(self):
        return self.szo

    def karakterek(self) -> set:
        """a szoban/szovegben levo karakterek"""
        return set(self.szo)

    def karakterek_kiir(self) -> str:
        """a szoban/szovegben levo karakterek"""
        return ' '.join(self.karakterek())

    def karakterek_szama(self) -> int:
        """a szoban/szovegben levo karakterek szama"""
        return len(self.karakterek())

    def abcbe(self) -> str:
        """a szot karakterek szerint sorbarendezi"""
        return ''.join(sorted(self.szo))

    def anagramma(self, other) -> bool:
        """ket szo anagramma-e"""
        return [False, True][self.abcbe() == other.abcbe()]

    def annagramma_kiir(self, other) -> str:
        """ket szo anagramma-e kiir"""
        return ['Nem anagramma', 'Anagramma'][self.anagramma(other)]


class Szavak:
    def __init__(self, szavak=None):
        if szavak is None:
            szavak = []
        self.szavak = szavak

    def abcbe_kiir(self) -> str:
        """a szavak abcbe kiir"""
        sz = ''
        for szo in self.szavak:
            sz += szo.abcbe() + '\n'
        return sz

    def anagrammak(self, szo) -> list:
        """a szo anagrammai a szavak kozott"""
        return [sz for sz in self.szavak if sz.anagramma(szo)]

    def anagrammak_kiir(self, szo) -> str:
        sz = ''
        """a szo anagrammai a szavak kozott"""
        if len(self.anagrammak(szo)):
            for szo in self.anagrammak(szo):
                sz += str(szo) + '\n'
        else:
            sz = 'Nincs a szótárban anagramma'
        return sz

    def leghosszabb(self) -> int:
        """a leghosszabb szo hossza"""
        return max(szo.hossz for szo in self.szavak)

    def leghosszabb_szavak(self) -> list:
        """leghosszabb szavak"""
        return [szo for szo in self.szavak if szo.hossz == self.leghosszabb()]

    def leghosszabb_szavak_kiir(self) -> str:
        """leghosszabb szavak kiir"""
        sz = ''
        for szo in self.leghosszabb_szavak():
            sz += str(szo) + '\n'
        return sz

    def szotar_kiir(self) -> str:
        """szavak kiirasa csoportositva"""
        szoveg = ''
        egyedi, egyediszavak = [], []
        for szo in self.szavak:
            if szo.abcbe() not in egyedi:
                egyedi.append(szo.abcbe())
                egyediszavak.append(Szo(szo.abcbe()))
        egyediszavak.sort(key=lambda x: x.hossz)

        hossz = egyediszavak[0].hossz
        for szo in egyediszavak:
            if szo.hossz > hossz:
                szoveg += '\n'
                hossz = szo.hossz
            for sz in self.szavak:
                if szo.anagramma(sz):
                    szoveg += str(sz) + ' '
            szoveg += '\n'
        return szoveg


class Fajl:
    def __init__(self, fnev, encoding='utf-8'):
        self.fnev = fnev

    def beolvas(self):
        """fajl adatainak beolvasasa"""
        f = open(self.fnev)
        szavak = [Szo(x.strip()) for x in f.readlines()]
        f.close()
        return szavak

    def kiir(self, adatok):
        """fajlba iras"""
        f = open(self.fnev, 'w', encoding='utf-8')
        print(adatok, end='', file=f)
        f.close()

# 1. feladat
szoveg = Szo(input("1. feladat\nAdjon megy egy szöveget: "))
print("A szövegben lévő különböző karakterek száma:", szoveg.karakterek_szama(),
      "\nA karakterek:", szoveg.karakterek_kiir())

# 2. feladat
print("2. feladat: fájl beolvasása")
fajl = Fajl('szotar.txt')
adatok = fajl.beolvas()
szavak = Szavak(adatok)

# 3. feladat
print("3. feladat: szavak kiírása fájlba")
fajl = Fajl('abcOOP.txt')
fajl.kiir(szavak.abcbe_kiir())
print("Fájlbaírás kész.")

# 4. feladat
egyik, masik = Szo(input("4. feladat\nAdjon meg egy szót: ")), Szo(input("Adjon meg egy másik szót: "))
print(egyik.annagramma_kiir(masik))

# 5. feladat
egyszo = Szo(input("5. feladat\nAdjon meg egy szót: "))
print(szavak.anagrammak_kiir(egyszo))

# 6. feladat
print("6. feladat:\nA leghosszabb szavak:")
print(szavak.leghosszabb_szavak_kiir())

# 7. feladat
print("7. feladat: rendezve.txt fájlba írás")
fajl = Fajl('rendezveOOP.txt')
fajl.kiir(szavak.szotar_kiir())
print("Fájlbaírás kész.")
