#include #include #include using namespace std; vector > muchii; int main() { int k,n,m,i,j; cin>>k>>m>>n; if(k<4) //Cazurile cu 1 nod, 2 noduri, si respectiv 3 noduri sunt particulare, existand mai putine solutii decat in cazul general pentru cazul n=m=1. if(k>1 && n==1 && m==1) { cout<<"Impossible\n"; return 0; } if(n>1 && m>1) //Se demonstreaza usor ca in acest caz nu exista solutie. De asemenea, mai stim ca ca n>0, m>0, n<=k si m<=k, deci nu mai avem de tratat aceste cazuri particulare. { cout<<"Impossible\n"; return 0; } else if(n==1) //n==1 && m>1 => Avem de construit un graf conex, cu m componente conexe in graful complementar. { //Construim un lant in graful complementar si restul de componente conexe in graful complementar vor fi noduri izolate. for(i=1;i<=k;i++) for(j=i+1;j<=k;j++) if(!(j==(i+1) && j<=(k-m+1))) muchii.push_back(make_pair(i,j)); } else //m==1 && n>1 => Avem de construit un graf cu n componente conexe, al caraui comlementar sa fie conex. { //Construim un lant in graful direct si restul de componente conexe in graful direct vor fi noduri izolate. for(i=2;i<=(k-n+1);i++) muchii.push_back(make_pair(i-1,i)); } //Afisam numarul de drumuri ce urmeaza a fi modernizate. cout< >::iterator it; for(it=muchii.begin();it!=muchii.end();it++) cout<first<<' '<second<<'\n'; return 0; }