#include<iostream>
#include<vector>
#include<set>
using namespace std;
vector< pair< char,pair<int,int> > >odp;
set< pair<int,int> >s1,s2;//s1 - koncowa spojna, s2 - aktualna spojna
set< pair<int,int> >::iterator it;
struct wi{
	vector<int>v;
	int o=-1;
	int czy_odw=0;
}*w,*ww;
void deefes(int a){
	w[a].czy_odw=1;
	for(int i=0;i<w[a].v.size();i++){
		if(w[w[a].v[i]].czy_odw==0){
			if(s2.find({1,w[a].v[i]})==s2.end()){
				odp.push_back({'+',{1,w[a].v[i]}});
				s2.insert({1,w[a].v[i]});
			}
			deefes(w[a].v[i]);
		}
	}
	return;
}
void deefes2(int a){
	ww[a].czy_odw=1;
	for(int i=0;i<ww[a].v.size();i++){
		if(ww[ww[a].v[i]].czy_odw==0){
			deefes2(ww[a].v[i]);
		}
	}
	if(s1.find({1,a})==s1.end()&&a!=1)odp.push_back({'-',{1,a}});
	return;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
	int n,v1,v2,m;
	cin>>n>>m;
	w=new wi[n+1];
	ww=new wi[n+1];
	for(int i=0;i<m;i++){
		cin>>v1>>v2;
		w[v1].v.push_back(v2);
		w[v2].v.push_back(v1);
		s2.insert({min(v1,v2),max(v1,v2)});
	}
	deefes(1);//laczenie z 1 wszystkich
	cin>>m;
	for(int i=0;i<m;i++){
		cin>>v1>>v2;
		if(s2.find({v1,v2})==s2.end()){
			odp.push_back({'+',{v1,v2}});
			s2.insert({min(v1,v2),max(v1,v2)});
		}
		ww[v1].v.push_back(v2);
		ww[v2].v.push_back(v1);
		s1.insert({min(v1,v2),max(v1,v2)});
	}
	for(it=s2.begin();it!=s2.end();it++){
		v1=(*it).first;
		v2=(*it).second;
		if(min(v1,v2)!=1&&s1.find(*it)==s1.end())odp.push_back({'-',*it});
	}
	deefes2(1);
	cout<<odp.size()<<'\n';
	for(int i=0;i<odp.size();i++)cout<<odp[i].first<<' '<<odp[i].second.first<<' '<<odp[i].second.second<<'\n';
	return 0;
}
        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  | #include<iostream> #include<vector> #include<set> using namespace std; vector< pair< char,pair<int,int> > >odp; set< pair<int,int> >s1,s2;//s1 - koncowa spojna, s2 - aktualna spojna set< pair<int,int> >::iterator it; struct wi{ vector<int>v; int o=-1; int czy_odw=0; }*w,*ww; void deefes(int a){ w[a].czy_odw=1; for(int i=0;i<w[a].v.size();i++){ if(w[w[a].v[i]].czy_odw==0){ if(s2.find({1,w[a].v[i]})==s2.end()){ odp.push_back({'+',{1,w[a].v[i]}}); s2.insert({1,w[a].v[i]}); } deefes(w[a].v[i]); } } return; } void deefes2(int a){ ww[a].czy_odw=1; for(int i=0;i<ww[a].v.size();i++){ if(ww[ww[a].v[i]].czy_odw==0){ deefes2(ww[a].v[i]); } } if(s1.find({1,a})==s1.end()&&a!=1)odp.push_back({'-',{1,a}}); return; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,v1,v2,m; cin>>n>>m; w=new wi[n+1]; ww=new wi[n+1]; for(int i=0;i<m;i++){ cin>>v1>>v2; w[v1].v.push_back(v2); w[v2].v.push_back(v1); s2.insert({min(v1,v2),max(v1,v2)}); } deefes(1);//laczenie z 1 wszystkich cin>>m; for(int i=0;i<m;i++){ cin>>v1>>v2; if(s2.find({v1,v2})==s2.end()){ odp.push_back({'+',{v1,v2}}); s2.insert({min(v1,v2),max(v1,v2)}); } ww[v1].v.push_back(v2); ww[v2].v.push_back(v1); s1.insert({min(v1,v2),max(v1,v2)}); } for(it=s2.begin();it!=s2.end();it++){ v1=(*it).first; v2=(*it).second; if(min(v1,v2)!=1&&s1.find(*it)==s1.end())odp.push_back({'-',*it}); } deefes2(1); cout<<odp.size()<<'\n'; for(int i=0;i<odp.size();i++)cout<<odp[i].first<<' '<<odp[i].second.first<<' '<<odp[i].second.second<<'\n'; return 0; }  | 
            
        
                    English