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
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
n = int(input())
graf1 = [[] for i in range(n)]
graf2 = [[] for i in range(n)]
relacje = {}
relacje_pierwszego = {}

dzialania_poczatek = []
dzialania_srodek = []
dzialania_koniec = []

DO_USUNIECIA = 0
#JEST_OK = 1
DO_DODANIA = 2

moves = []

m = int(input())
for _ in range(m):
    a, b = map(int, input().split())
    a, b = (a-1, b-1) if a < b else (b-1, a-1)
    graf1[a].append(b)
    graf1[b].append(a)
    if a:
        relacje[(a, b)] = DO_USUNIECIA

#print(graf1)

m = int(input())
for _ in range(m):
    a, b = map(int, input().split())
    a, b = (a-1, b-1) if a < b else (b-1, a-1)
    graf2[a].append(b)
    graf2[b].append(a)
    if not a:
        relacje_pierwszego[b] = 1
    else:
        if (a, b) in relacje:
            #relacje[(a, b)] = JEST_OK
            del relacje[(a, b)]
        else:
            relacje[(a, b)] = DO_DODANIA
#print(graf2)

for k, v in relacje.items():
    if v == DO_DODANIA:
        dzialania_srodek.append("+ " + str(k[0]+1) + " " + str(k[1]+1))
    elif v == DO_USUNIECIA:
        dzialania_srodek.append("- " + str(k[0]+1) + " " + str(k[1]+1))
    #print(k, v)

#print(relacje)
del relacje


# bfs
queue = graf1[0]
visited = [0 for i in range(n)]
visited[0] = 1
for i in queue:
    visited[i] = 1

while queue:
    new = []
    for i in queue:
        for j in graf1[i]:
            if not visited[j]:
                dzialania_poczatek.append("+ 1 " + str(j+1))
                visited[j] = 1
                new.append(j)
    #print(new)
    queue = new

del queue
del visited
del graf1

# bfs
queue = graf2[0]
visited = [0 for i in range(n)]
visited[0] = 1
for i in queue:
    visited[i] = 1

while queue:
    new = []
    for i in queue:
        for j in graf2[i]:
            if not visited[j]:
                if j not in relacje_pierwszego:
                    dzialania_koniec.append("- 1 " + str(j+1))
                visited[j] = 1
                new.append(j)
    #print(new)
    queue = new

del queue
del visited
del graf2
del relacje_pierwszego

dzialania_koniec.reverse()

moves = dzialania_poczatek + dzialania_srodek + dzialania_koniec

print(len(moves))
print("\n".join(moves))