Brandvägg

På Internet finns många elaka typer som försöker hacka andras datorer i tid och otid. De stjäl kattbilder, bankinloggningar och medlemslistor på programmerares dejtingsidor. En av de första åtgärderna man kan sätta in mot attacker över nätet är brandväggen. En brandvägg filtrerar nätverkstrafik baserat på olika kriterier, för att försöka stänga ute obehöriga. I detta problem ska vi skriva den delen av en brandvägg som avgör om ett visst meddelande som inkommer till en server över ett nätverk ska blockeras (“droppas”) eller inte (“accepteras”).

En brandvägg består av ett antal regler i en lång lista. En regel är på formen “om [lista av villkor] alla är sanna, utför en handling”. Villkoren är på formen

port=XYZ

- om meddelandet skickats till port XYZ.

ip=XYZ

- om meddelandet skickats från IP-addressen XYZ.

limit=XYZ

- om minst XYZ av de senaste 1000 meddelandena (inkluderat det som just kom) skickats från denna IP.

och handlingarna är en av

accept

- släpp genom paketet i brandväggen. Skriv ut accept paket-ID.

log

- skriv ut log paket-ID.

drop

- blockera paketet. Skriv ut drop paket-ID.

En regel skulle alltså kunna se ut som:

accept

- acceptera paketet ovillkorligen.

accept ip=127.0.0.1

- acceptera paketet om det kommer från IP-addressen 127.0.0.1.

drop port=22 ip=192.168.1.1

- droppa paketet om det kommer från IP-addressen 192.168.1.1 och skickas till port 22.

log port=80 limit=500

- logga paketet om det skickas till port 80, och hälften av de senaste 1000 meddelandena skickades från denna IP-address.

När ett paket kommer in i brandväggen tittar man på alla regler i listan upifrån och ned, tills man når en regel som matchar paketet. Den givna brandväggen kommer alltid vara så att paketet kommer accepteras eller droppas innan listan tar slut.

Input

Den första raden i indatan innehåller ett heltal $1 \le N \le 100$, antalet regler i brandväggen.

De nästa $N$ raderna innehåller reglerna i listan, en regel per rad.

Nästa rad innehåller ett heltal $P \le 10\, 000$, antalet paket som kommer in till brandväggen. De är givna i ordningen de kom in. Ett paket är på formen IP:port, t.ex. 127.0.0.1:123. Paketets ID är bara vilken position paketet har i listan. Det första paketet har ID $1$ och det sista har ID $P$.

En port är ett heltal $1 \le p \le 65535$.

Output

För varje paket ska du köra det genom brandväggen. Varje handling som utförs beskriver vad du ska skriva ut. Notera att eftersom handlingen log inte avbryter paketets färd genom listan med regler kan ett paket ge upphov till mer än en utskrift.

Poängsättning

Din lösning kommer att testas på en mängd testfallsgrupper. För att få poäng för en grupp så måste du klara alla testfall i gruppen.

Grupp

Poängvärde

Begränsningar

1

7

$P \le 10\, 000$. Det finns bara accept-handlingar.

2

15

$P \le 10\, 000$. Ingen regel har något villkor.

3

29

$P \le 10\, 000$. Det finns inga limit-villkor.

4

25

$P \le 100$

5

14

$P \le 1\, 000$

6

10

$P \le 10\, 000$

Sample Input 1 Sample Output 1
6
accept ip=127.0.0.1
drop port=22
accept limit=5
accept port=80
accept port=10 port=11
drop
16
127.0.0.1:80
127.0.0.1:22
192.168.0.1:80
192.168.0.1:11
192.168.0.1:12
192.168.0.1:13
192.168.0.1:14
192.168.0.1:15
192.168.0.1:16
192.168.0.1:22
192.168.0.1:80
154.135.0.5:22
154.135.0.5:80
127.0.0.1:8080
215.215.5.8:5919
215.215.5.9:5919
accept 1
accept 2
accept 3
drop 4
drop 5
drop 6
accept 7
accept 8
accept 9
drop 10
accept 11
drop 12
accept 13
accept 14
drop 15
drop 16
Sample Input 2 Sample Output 2
4
accept ip=192.168.0.1
log port=22
accept
drop
16
127.0.0.1:80
127.0.0.1:22
192.168.0.1:80
192.168.0.1:11
192.168.0.1:12
192.168.0.1:13
192.168.0.1:14
192.168.0.1:15
192.168.0.1:16
192.168.0.1:22
192.168.0.1:80
154.135.0.5:22
154.135.0.5:80
127.0.0.1:8080
215.215.5.8:5919
215.215.5.9:5919
accept 1
log 2
accept 2
accept 3
accept 4
accept 5
accept 6
accept 7
accept 8
accept 9
accept 10
accept 11
log 12
accept 12
accept 13
accept 14
accept 15
accept 16
Sample Input 3 Sample Output 3
5
log limit=1
log limit=2
log limit=3
drop limit=1
accept
16
127.0.0.1:80
127.0.0.1:22
192.168.0.1:80
192.168.0.1:11
192.168.0.1:12
192.168.0.1:13
192.168.0.1:14
192.168.0.1:15
192.168.0.1:16
192.168.0.1:22
192.168.0.1:80
154.135.0.5:22
154.135.0.5:80
127.0.0.1:8080
215.215.5.8:5919
215.215.5.9:5919
log 1
drop 1
log 2
log 2
drop 2
log 3
drop 3
log 4
log 4
drop 4
log 5
log 5
log 5
drop 5
log 6
log 6
log 6
drop 6
log 7
log 7
log 7
drop 7
log 8
log 8
log 8
drop 8
log 9
log 9
log 9
drop 9
log 10
log 10
log 10
drop 10
log 11
log 11
log 11
drop 11
log 12
drop 12
log 13
log 13
drop 13
log 14
log 14
log 14
drop 14
log 15
drop 15
log 16
drop 16