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
107
#include <iostream>

int main() {
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(NULL);
    std::cout.tie(NULL);
    int n, ms, md, n2, ms2, md2;
    std::cin >> n;
    n2=n*2;
    std::cin >> ms;
    ms2=ms*2;
    int ** wias=new int*[n];
    int * wias_c=new int[n];
    int * sources=new int[ms*2];
    std::fill(wias_c, wias_c+n, 0);
    for (int i=0; i<ms2; i+=2) {
        std::cin >> sources[i] >> sources[i+1];
        sources[i]-=1;
        sources[i+1]-=1;
        wias_c[sources[i]]+=1;
        wias_c[sources[i+1]]+=1;
    }
    for (int i=0; i<n; i++) {
        wias[i]=new int[wias_c[i]];
        wias_c[i]=0;
    }
    for (int i=0; i<ms2; i+=2) {
        wias[sources[i]][wias_c[sources[i]]]=sources[i+1];
        wias_c[sources[i]]+=1;
        wias[sources[i+1]][wias_c[sources[i+1]]]=sources[i];
        wias_c[sources[i+1]]+=1;
    }
    int ** wiad=new int*[n];
    int * wiad_c=new int[n];
    std::cin >> md;
    md2=md*2;
    int * sourced=new int[md2];
    std::fill(wiad_c, wiad_c+n, 0);
    for (int i=0; i<md2; i+=2) {
        std::cin >> sourced[i] >> sourced[i+1];
        sourced[i]-=1;
        sourced[i+1]-=1;
        wiad_c[sourced[i]]+=1;
        wiad_c[sourced[i+1]]+=1;
    }
    for (int i=0; i<n; i++) {
        wiad[i]=new int[wiad_c[i]];
        wiad_c[i]=0;
    }
    for (int i=0; i<md2; i+=2) {
        wiad[sourced[i]][wiad_c[sourced[i]]]=sourced[i+1];
        wiad_c[sourced[i]]+=1;
        wiad[sourced[i+1]][wiad_c[sourced[i+1]]]=sourced[i];
        wiad_c[sourced[i+1]]+=1;
    }

    std::cout << (n+n+md+ms-wias_c[0]-wias_c[0]-wiad_c[0]-wiad_c[0]-2) << '\n';


    bool * was=new bool[n];
    std::fill(was, was+n, false);
    was[0]=true;
    int * que=new int[n];
    que[0]=0;
    int que1=1;
    for (int i=0; i<n; i++) {
        for(int j=0; j<wias_c[que[i]]; j++) {
            if (!(was[wias[que[i]][j]])) {
                was[wias[que[i]][j]]=true;
                que[que1]=wias[que[i]][j];
                que1++;
            }
        }
    }
    for (int i=wias_c[0]+1; i<n; i++) {
        std::cout << "+ " << 1 << ' ' << (que[i]+1) << '\n';
    }
    for (int i=0; i<ms2; i+=2) {
        if ((sources[i] != 0) && (sources[i+1] != 0)) {
            std::cout << "- " << (sources[i]+1) << ' ' << (sources[i+1]+1) << '\n';
        }
    }

    std::fill(was, was+n, false);
    was[0]=true;
    que[0]=0;
    que1=1;
    for (int i=0; i<n; i++) {
        for(int j=0; j<wiad_c[que[i]]; j++) {
            if (!(was[wiad[que[i]][j]])) {
                was[wiad[que[i]][j]]=true;
                que[que1]=wiad[que[i]][j];
                que1++;
            }
        }
    }

    for (int i=0; i<md2; i+=2) {
        if ((sourced[i] != 0) && (sourced[i+1] != 0)) {
            std::cout << "+ " << (sourced[i]+1) << ' ' << (sourced[i+1]+1) << '\n';
        }
    }
    for (int i=n-1; i>wiad_c[0]; i--) {
        std::cout << "- " << 1 << ' ' << (que[i]+1) << '\n';
    }
    return 0;
}