#include<bits/stdc++.h>
using namespace std;
const int N = 1e4+10;
int m,fa[N],vis[N],d[N],bzz[N],ans[N],ans_2[N],c,q,bz,bz_2;
vector<pair<int,int> > G[N];
stack<int> s;
map<int,int> mp;
int find(int x){
if(fa[x]==x) return x;
else return fa[x]=find(fa[x]);
}
void merge(int x,int y){
int fx=find(x),fy=find(y);
if(fx!=fy){
fa[fx]=fy;
}
}
void dfs(int x){
for(int i=0;i<G[x].size();i++){
if(!bzz[G[x][i].second]){
bzz[G[x][i].second]=1;
dfs(G[x][i].first);
s.push(G[x][i].second);
}
}
}
int main(){
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
cin>>m;
for(int i=1;i<=N-10;i++) fa[i]=i;
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
G[x].push_back(make_pair(y,i));
G[y].push_back(make_pair(x,i));
vis[x]=1;
vis[y]=1;
d[x]++;
d[y]++;
merge(x,y);
}
if(m==1){
cout<<-1<<endl;
exit(0);
}
int cnt=0;
for(int i=1;i<=N-10;i++){
if(!vis[i]) continue;
if(fa[i]==i){
cnt++;
if(cnt==1) bz=i;
else bz_2=i;
}
}
if(cnt==1){
int tot=0,bz_3=1;
for(int i=1;i<=N-10;i++){
if(!vis[i]) continue;
if(d[i]%2==1&&tot==0){
tot++;
bz=i;
}
else if(d[i]%2==1&&tot==1){
tot++;
bz_2=i;
}
else if(d[i]%2==1&&tot==2){
tot++;
bz_3=i;
}
else if(d[i]%2==1){
tot++;
}
}
if(tot==0||tot==2){
dfs(bz);
int dc=0;
while(!s.empty()){
int x=s.top();
s.pop();
if(dc==0) ans[1]=x;
else ans_2[dc]=x;
dc++;
}
cout<<1<<endl;
cout<<ans[1]<<endl;
cout<<dc-1<<endl;
for(int i=1;i<dc;i++){
cout<<ans_2[i]<<endl;
}
}
else if(tot==4){
G[bz].push_back(make_pair(bz_2,m+1));
dfs(bz_3);
bool flag=true;
while(!s.empty()){
int x=s.top();
s.pop();
if(x!=m+1&&flag){
ans[++c]=x;
}
if(x==m+1||!flag){
flag=false;
if(x!=m+1) ans_2[++q]=x;
}
}
cout<<c<<endl;
for(int i=1;i<=c;i++){
cout<<ans[i]<<endl;
}
cout<<q<<endl;
for(int i=1;i<=q;i++){
cout<<ans_2[i]<<endl;
}
}
else{
cout<<-1<<endl;
}
}
else if(cnt==2){
int tot=0,tot_2=0;
for(int i=1;i<=N-10;i++){
if(!vis[i]) continue;
else if(d[i]%2==1&&fa[find(i)]==fa[find(bz)]){
tot++;
}
else if(d[i]%2==1&&fa[find(i)]!=fa[find(bz)]){
bz_2=i;
tot_2++;
}
}
if(tot==0||tot==2){
if(tot_2==0||tot_2==2){
dfs(bz);
while(!s.empty()){
int x=s.top();
s.pop();
ans[++c]=x;
}
dfs(bz_2);
while(!s.empty()){
int x=s.top();
s.pop();
ans_2[++q]=x;
}
cout<<c<<endl;
for(int i=1;i<=c;i++){
cout<<ans[i]<<endl;
}
cout<<q<<endl;
for(int i=1;i<=q;i++){
cout<<ans_2[i]<<endl;
}
}
else{
cout<<-1<<endl;
}
}
else{
cout<<-1<<endl;
}
}
else{
cout<<-1<<endl;
}
return 0;
}