#include "Alicelib.h"
#include <bits/stdc++.h>
using namespace std;
vector<pair<int,int>> reb;
void Alice( int N, int M, int A[], int B[])
{
for(int i=0;i<M;i++)reb.push_back({A[i],B[i]});
for(int i=0;i<N;i++)
{
for(int j=0;j<10;j++)
{
if(i&(1LL<<j))reb.push_back({i,N+j});
}
}
for(int i=0;i<9;i++)reb.push_back({N+i,N+i+1});
for(int i=0;i<N+10;i++)reb.push_back({N+10,i});
for(int i=0;i<10;i++)reb.push_back({N+i,N+11});
InitG(N+12,reb.size());
for(int i=0;i<reb.size();i++)
{
MakeG(i,reb[i].first,reb[i].second);
}
}
#include "Boblib.h"
#include <bits/stdc++.h>
using namespace std;
unordered_set<int> edg[2000];
long long realVal[2000];
set<pair<int,int>> realReb;
pair<int,int> form(pair<int,int> a)
{
if(a.first>a.second)return a;
swap(a.first,a.second);
return a;
}
void Bob( int V, int U, int C[], int D[] )
{
for(int i=0;i<U;i++)
{
edg[C[i]].insert(D[i]);
edg[D[i]].insert(C[i]);
}
int VS,BIN;
vector<int> BINNUM;
for(int i=0;i<V;i++)
{
if(edg[i].size()==V-2)VS=i;
}
for(int i=0;i<V;i++)
{
if(i!=VS&&edg[VS].find(i)==edg[VS].end())BIN=i;
}
for(auto i:edg[BIN])BINNUM.push_back(i);
sort(BINNUM.begin(),BINNUM.end());
//cout<<BINNUM.size()<<endl;
do
{
bool flag=1;
for(int i=0;i<9;i++)
{
//cout<<i<<endl;
if(edg[BINNUM[i]].find(BINNUM[i+1])==edg[BINNUM[i]].end())flag=0;
}
if(flag)break;
}while(next_permutation(BINNUM.begin(),BINNUM.end()));
if(edg[BINNUM[0]].size()<edg[BINNUM[9]].size())reverse(BINNUM.begin(),BINNUM.end());
for(auto i:BINNUM)realVal[i]=-1;
realVal[BIN]=-1;
realVal[VS]=-1;
for(int i=0;i<10;i++)
{
for(auto j:edg[BINNUM[i]])
{
if(realVal[j]!=-1)realVal[j]+=(1LL<<i);
}
}
int N=0;
for(int i=0;i<V;i++)
{
if(realVal[i]==-1)continue;
N++;
for(auto j:edg[i])
{
if(realVal[j]==-1)continue;
realReb.insert(form({realVal[i],realVal[j]}));
}
}
InitMap(N,realReb.size());
for(auto i:realReb)MakeMap(i.first,i.second);
}