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
from collections import defaultdict
n = int(input())
ms = int(input())
wiazania = []
operacje = []
graf = defaultdict(list)
for i in range(ms):
    wiazanie = sorted([int(x) for x in input().split()])
    wiazania.append(wiazanie)
    graf[wiazanie[0]].append(wiazanie[1])
    graf[wiazanie[1]].append(wiazanie[0])
md = int(input())
potrzebne = []
wiazania_celu = []
for i in range(md):
    wiazanie = sorted([int(x) for x in input().split()])
    if wiazanie not in wiazania:
        potrzebne.append(wiazanie)
    wiazania_celu.append(wiazanie)

def nurek(start, cel, historia):
    for i in graf[start]:
        if i not in historia:
            historia.append(i)
            if i == cel:
                return historia  
            if nurek(i, cel, historia):
                return historia  
            historia.pop()  
    return False 

for x in potrzebne:
    route = nurek(x[0], x[1], [x[0]])
    for i in range(len(route)//4):
        wiazania.append([route[i], route[i+2]])
        operacje.append(f"+ {route[i]} {route[i+2]}")
    wiazania.append([x[0], x[1]])
    operacje.append(f"+ {x[0]} {x[1]}")

# tutaj powinny być dodane teraz usune
set1 = set(tuple(x) for x in wiazania)
set2 = set(tuple(x) for x in wiazania_celu)
difference = set1 - set2

for x in difference:
    route = nurek(x[0], x[1], [x[0]])
    for i in range(len(route)//4):
        wiazania.remove([route[i], route[i+2]])
        operacje.append(f"- {route[i]} {route[i+2]}")
    wiazania.remove([x[0], x[1]])
    operacje.append(f"- {x[0]} {x[1]}")
print(len(operacje))
for i in operacje:
    print(i)