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) pozice = [0] * C # pozice[i] udává, kolik políček jsme už prozkoumali v i-té chodbě dolaru = 0 while True: zmena = False for cislo_chodby in range(len(chodby)): chodba = chodby[cislo_chodby] while pozice[cislo_chodby] < len(chodba): policko = chodba[pozice[cislo_chodby]] if policko > 0: # dveře if not klice[policko]: break # nemáme klíč, nemůžeme dál if policko < 0: klice[-policko] = True zmena = True elif policko == 0: dolaru += 1 pozice[cislo_chodby] += 1 # 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)