Pagini recente » Cod sursa (job #2167183) | Cod sursa (job #681238) | Cod sursa (job #986211) | Cod sursa (job #1778961) | Cod sursa (job #1025619)
#include <cstdio>
#include <algorithm>
#include<vector>
#include<queue>
#include<list>
#include<stack>
using namespace std;
int y,nod,minim,i,aux,n,k,x2,x1,j,p,s,unu,t,m,doi,x,st,dr,maxi,sol,maxi2,ok;
list <int> a[2000];
stack <int>stiva;
vector<int> circuit;
void sterge(int nod, int vecin) {
//sterg muchia dintre nod si vecinul sau
a[nod].pop_front();
list<int>::iterator it;
for (it = a[vecin].begin(); it != a[vecin].end(); ++it)
if (*it == nod) {
a[nod].erase(it);
break;
}
}
void euler(int nod) {
int vecin;
while(! a[nod].empty())
{
//printf("%d ",nod);
vecin=a[nod].front();
stiva.push(nod);
sterge(nod,vecin);
nod=vecin;
}
}
void solve() {
int nod = 1;
do {
euler(nod);
// printf("\n");
nod = stiva.top();
stiva.pop();
circuit.push_back(nod);
}while (!stiva.empty());
}
void write()
{
for(i=1;i<circuit.size();i++)
{
printf("%d %d\n",circuit[i-1],circuit[i]);
}
printf("1 %d",n);
}
int main()
{
freopen ("domino2.in","r",stdin);
freopen ("domino2.out","w",stdout);
scanf("%d",&n);
if(n%2==0)
{
printf("-1");
}
else {
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++){
a[i].push_back(j);
}
}
solve();
write();
}
}