http://codeforces.com/problemset/problem/22/C
/**
CF 22C 图论
题目大意:
给定顶点数n,边数m,一个点v。构造一个以v为割点的图
解题思路:原图必须连通,又有任意两点之间无重边,因此m<n-1或(n-1)*(n-2)/2+1<m,就无法构造。
从所有点中任意挑选一个点u只和v相连,剩下的边在n-1个顶点中相互连,这样v必为割点。
*/
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
int n,v,m;
int main()
{
while(~scanf("%d%d%d",&n,&m,&v))
{
if(m<n-1||((n-1)*(n-2))/2+1<m)
{
printf("-1\n");
continue;
}
///如果v==1,则u=1;否则,u=2
if(v==1)
{
printf("1 2\n");
m--;
for(int i=1;i<=n&&m;i++)
{
for(int j=i+1;j<=n&&m;j++)
{
if(i==2||j==2)continue;
printf("%d %d\n",i,j);
m--;
}
}
}
else
{
printf("1 %d\n",v);
m--;
for(int i=1;i<=n&&m;i++)
{
for(int j=i+1;j<=n&&m;j++)
{
if(i==1||j==1)continue;
printf("%d %d\n",i,j);
m--;
}
}
}
}
return 0;
}