#!/usr/bin/python3 # Martin "Medvěd" Mareš a Jirka Setnička from collections import defaultdict, deque # 1. Načteme vstup H, K = map(int, input().split()) # Globální proměnné, které budeme používat: hadi = [] # Bude obsahovat jeden spojový seznam pro každého hada hadiPrikazy = [] # Bude obsahovat string s příkazy pro každého hada kdyUmrel = [-1] * H # Kdy který had umřel # 1.1 Načtení jednotlivého hada for _ in range(H): delka = int(input()) souradnice = list(map(int, input().split())) assert len(souradnice) == 2*delka, "Kontrola: Pocet souradnic neodpovida delce hada" had = deque() for i in range(delka): had.append((souradnice[2*i], souradnice[2*i+1])) hadi.append(had) prikaz = input() assert len(prikaz) == K, "Kontrola: Delka prikazu neni K" hadiPrikazy.append(prikaz) # 2. Inicializujeme si obsazená políčka aktuální polohou hadů # Obsazené políčka si chceme pamatovat ve slovníku/hashovací tabulce, takže nám # v průměru zajistí konstantní čas na operaci. Použijeme na to navíc speciální # slovník defaultdict, který při dotazu na neexistující políčka bude vracet 0 # (namísto chyby) obsazeno = defaultdict(int) for had in hadi: for policko in had: assert policko not in obsazeno, "Kontrola: Kolize na vstupu" obsazeno[policko] += 1 # 3. Zahájíme simulaci jednotlivých kroků for t in range(K): # 3.1 Pro každého (živého) hada spočítáme posun jeho hlavy for had, prikazy in zip(hadi, hadiPrikazy): if had is None: continue # Přeskočíme již mrtvé hady # Zkrátíme se o ocas (a odstraníme ocas z obsazených políček) ocas = had.popleft() obsazeno[ocas] -= 1 # Spočítáme pozici nové hlavy hlava_x, hlava_y = had[-1] prikaz = prikazy[t] if prikaz == 'l': hlava_x -= 1 elif prikaz == 'p': hlava_x += 1 elif prikaz == 'n': hlava_y += 1 elif prikaz == 'd': hlava_y -= 1 else: assert False, "Kontrola: Neplatný příkaz '{}'".format(prikaz) novaHlava = (hlava_x, hlava_y) # Přidáme hlavu had.append(novaHlava) obsazeno[novaHlava] += 1 # 3.2 Pro každého (živého) hada zkontrolujeme, jestli nenaboural vycistit = [] for i in range(H): had = hadi[i] if had is None: continue # Přeskočíme již mrtvé hady hlava = had[-1] if obsazeno[hlava] > 1: # Had naboural a umřel, přidáme ho k vyčištění kdyUmrel[i] = t vycistit.append(i) # 3.3 Vyčistíme mrtvé hady z plánu (musíme udělat až po všech kontrolách) for i in vycistit: for policko in hadi[i]: obsazeno[policko] -= 1 hadi[i] = None for d in kdyUmrel: if d < 0: print("NAZIVU") else: print(d+1) # Číslujeme kola od jedničky