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
#include <bits/stdc++.h>

using namespace std;
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n,m1,m2,a,b;
    cin >> n;
    set<pair<int, int>>poczpair;
    set<pair<int, int>>konpair;
    vector<vector<int>>pocz(n+1);
    vector<pair<int, int>>dod;
    vector<pair<int, int>>od;
    pair<int, int>p;
    vector<int>jedynkidodane;
    cin >> m1;
    for (int i = 0; i < m1; i++){
        cin >> a >> b;
        p = make_pair(min(a, b), max(a, b));
        poczpair.insert(p);
        pocz[a].push_back(b);
        pocz[b].push_back(a);
    }
    set<int>jedynkidozostawienia;
    cin >> m2;  
    for (int i = 0; i < m2; i++){
        cin >> a >> b;
        p = make_pair(min(a, b), max(a, b));
        konpair.insert(p);
        if (p.first == 1){
            jedynkidozostawienia.insert(p.second);
        }
        auto it = poczpair.find(p);
        if (it == poczpair.end() and p.first != 1){
            dod.push_back(p);
        }     
    }
    queue<int>q;
    vector<bool>o(n+1, 0);
    o[1] = 1;
    for (int i = 0; i < pocz[1].size(); i++){
        q.push(pocz[1][i]);
        o[pocz[1][i]] = 1;
    }
    vector<int>jedynki;
    vector<int>jedynkiusuwanie;
    while (q.size() >= 1){
        int x = q.front();
        q.pop();
        for (int i = 0; i < pocz[x].size(); i++){
            if (o[pocz[x][i]] == 0){
                q.push(pocz[x][i]);
                o[pocz[x][i]] = 1;
                jedynkidodane.push_back(pocz[x][i]);
                jedynki.push_back(pocz[x][i]);
            }
        }
    }
    for (auto it = poczpair.begin(); it != poczpair.end(); it++){
        p = *it;
        if(p.first != 1){
            auto ite = konpair.find(p);
            if (ite == konpair.end()){
                od.push_back(p);
            }
        }     
    }
    for (int i = 0; i < pocz[1].size(); i++){
        jedynki.push_back(pocz[1][i]);
    }
    
    for (int i = 0; i < jedynki.size(); i++){
        auto it = jedynkidozostawienia.find(jedynki[i]);
        if (it == jedynkidozostawienia.end()){
            jedynkiusuwanie.push_back(jedynki[i]);
        }
    }
    int odps;
    odps = jedynkidodane.size() + dod.size() + od.size() + jedynkiusuwanie.size();
    cout << odps << endl;
    for (int i = 0; i < jedynkidodane.size(); i++){
        cout << "+ 1 "<< jedynkidodane[i] << endl;
    }
    for (int i = 0; i < dod.size(); i++){
        cout << "+ " << dod[i].first << " " << dod[i].second << endl;
    } 
    for (int i = 0; i < od  .size(); i++){
        cout << "- " << od[i].first << " " << od[i].second << endl;
    }
    for (int i = 0; i < jedynkiusuwanie.size(); i++){
        cout << "- 1 "<< jedynkiusuwanie[i] << endl;
    }
    return 0;
}