# Načteme údaje o kroužcích, převedeme je na údaje o žácích Z = int(input()) # počet žáků K = int(input()) # počet kroužků # Pro každého žáka seznam jeho kroužků krouzky = [ [] for z in range(Z) ] for k in range(K): krouzek = [ int(x) for x in input().split() ] for x in krouzek: krouzky[x].append(k) # žák x navštěvuje kroužek k # Budeme binárně vyhledávat minimální počet žáků-předsedů # na začátku víme, že 0 předsedů je málo a že Z určitě stačí malo, dost = 0, Z while dost > malo+1: stred = (malo + dost) // 2 if existuje_pokryti( stred, K, Z, krouzky ): dost = stred else: malo = stred print(dost)