#include "Alicelib.h"
#include <iostream>
#include <cassert>
#include <vector>
using namespace std;
using pii=pair<int, int>;
void InitG(int V, int U);
void MakeG(int pos, int C, int D);
void Alice(int N, int M, int A[], int B[])
{
vector<pii> E;
for (int i=0; i<M; i++) E.push_back({A[i], B[i]});
int cnt=N;
for (int i=0; i<N; i++)
{
for (int j=1; j<=i+2; j++)
{
E.push_back({i, cnt++});
}
}
InitG(cnt, E.size());
for (int i=0; i<E.size(); i++)
{
assert(E[i].first!=E[i].second);
assert(0<=E[i].first && E[i].first<cnt);
assert(0<=E[i].second && E[i].second<cnt);
MakeG(i, E[i].first, E[i].second);
//cerr<<E[i].first<<' '<<E[i].second<<endl;
}
}
#include "Boblib.h"
#include <iostream>
#include <cassert>
#include <vector>
using namespace std;
using pii=pair<int, int>;
void InitMap(int N, int M);
void MakeMap(int A, int B);
void Bob(int V, int U, int C[], int D[])
{
int deg[V]={0}, id[V];
for (int i=0; i<V; i++) id[i]=-2;
for (int i=0; i<U; i++)
{
deg[C[i]]++;
deg[D[i]]++;
}
for (int i=0; i<U; i++)
{
//cerr<<C[i]<<' '<<D[i]<<endl;
if (deg[C[i]]==1)
{
assert(deg[D[i]]>1);
id[D[i]]++;
}
if (deg[D[i]]==1)
{
assert(deg[C[i]]>1);
id[C[i]]++;
}
}
//for (int i=0; i<V; i++) cerr<<deg[i]<<' '; cerr<<endl;
//for (int i=0; i<V; i++) cerr<<id[i]<<' '; cerr<<endl;
int mx=0; vector<pii> E;
for (int i=0; i<U; i++)
{
//cerr<<C[i]<<' '<<D[i]<<endl;
if (deg[C[i]]==1) assert(id[C[i]]==-2);
else if (deg[D[i]]==1) assert(id[D[i]]==-2);
else
{
E.push_back({id[C[i]], id[D[i]]});
mx=max(mx, id[C[i]]);
mx=max(mx, id[D[i]]);
}
}
InitMap(mx+1, E.size());
for (auto [U, V]:E) MakeMap(U, V);
}