让v和所有的点相连(n-1条边)
割点v连的某个点r,去掉割点v后,剩下n-1个点,其中除了r之外的n-2个点互连(最多(n-2)(n-3)/2条边),
那么这n-2个点都不与r相连,只有v和r相连,所以去掉v后,剩下的n-1个点不连通,构造完成~
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int n,m,v;
scanf("%d%d%d",&n,&m,&v);
ll c=(n-2)*(n-3)/2+n-1;
int r=n;
if(v==n) r=1;
if(m<n-1||m>c){
puts("-1");
}else{
for(int i=1;i<=n;++i){
if(i==v) continue;
printf("%d %d\n",i,v); //v连接了关键点r
}//n-1
//剩下的n-1个点 不再连r
int cnt=n-1;
for(int i=1;i<=n&&cnt<m;++i){//完全图?
if(i==v||i==r) continue;
for(int j=i+1;j<=n&&cnt<m;++j){
if(j==v||j==r) continue;
printf("%d %d\n",i,j);
++cnt;
}
}
}
}