C, D = map(int, input().split()) chodby = [] for i in range(C): chodba = list(map(int, input().split()))[1:] # zahodíme první číslo udávající délku chodby.append(chodba) # klice[i] je True, pokud máme klíč číslo i # Porotože klíče číslujeme od jedničky, potřebujeme pole délky D+1 # (použijeme indexy 1 až D, index 0 nepoužijeme) klice = [False] * (D+1) dolaru = 0 NIC = 9999999 # speciální hodnota označující prázdné políčko (po sebrání dolaru) while True: zmena = False for chodba in chodby: for pozice in range(len(chodba)): policko = chodba[pozice] if policko == NIC: # prázdné políčko pass elif policko == 0: # dolar dolaru += 1 chodba[pozice] = NIC # smažeme, abychom nesebrali dvakrát elif policko < 0: # klíč klice[-policko] = True chodba[pozice] = NIC zmena = True elif policko > 0: # dveře if not klice[policko]: # nemáme klíč break # skončíme průchod chodby # Pokud jsme nesebrali žádný nový klíč, nemá cenu procházet bludiště znovu, # na žádná nová místa se nedostaneme. if not zmena: break print(dolaru)