1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import sys

def czy_mozna_usunac(x, y, klocki):
    """Sprawdza, czy klocek na (x, y) można usunąć."""
    brak_pionowych = (x - 1, y) not in klocki and (x + 1, y) not in klocki
    brak_poziomych = (x, y - 1) not in klocki and (x, y + 1) not in klocki
    return brak_pionowych or brak_poziomych

def policz_usuwalne(klocki):
    """Zwraca liczbę usuwalnych klocków na podstawie ich konfiguracji, usuwając je aż nie będzie więcej."""
    usuwalne = set()
    
    # Dodajemy do zbioru wszystkie klocki, które mogą być usunięte
    for x, y in klocki:
        if czy_mozna_usunac(x, y, klocki):
            usuwalne.add((x, y))
    
    liczba_usunietych = 0
    while usuwalne:
        # Usuwamy klocki dopóki możemy coś usunąć
        for klocek in usuwalne:
            klocki.remove(klocek)
            liczba_usunietych += 1
        
        usuwalne.clear()
        
        # Ponownie sprawdzamy, które klocki są usuwalne
        for x, y in klocki:
            if czy_mozna_usunac(x, y, klocki):
                usuwalne.add((x, y))
    
    return liczba_usunietych  # Zwracamy liczbę usuniętych klocków

# Wczytywanie danych
n, m, k, q = map(int, sys.stdin.readline().split())

# Przechowujemy klocki w zbiorze
klocki = set()
for _ in range(k):
    x, y = map(int, sys.stdin.readline().split())
    klocki.add((x, y))

dodatkowe_klocki = []
# Obsługa zapytań
for _ in range(q):
    x, y = map(int, sys.stdin.readline().split())
    dodatkowe_klocki.append((x, y))
    
# bez dodawania klocków
print(policz_usuwalne(klocki))

# po dodawaniu/usuwaniu poszczególnych klocków
for x, y in dodatkowe_klocki:
    if (x, y) in klocki:
        klocki.remove((x, y))  # Usuwamy klocek
    else:
        klocki.add((x, y))  # Dodajemy klocek

    # Obliczamy liczbę usuwalnych klocków po każdej zmianie
    print(policz_usuwalne(klocki))