/*
ZADATAK: balegovi
JEZIK: C++
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <memory.h>

int n,i,k;
bool q,r;
int el1[2000000];
int el2[2000000];
int el3[2000000];
int p1[1000000];
int p2[1000000];
int poc[1000000];
int a[1000000];
int b[1000000];

void dodaj(int i)
{
b[i]=1;     
if (r)
{
  int j;    
  if ((p1[i]==p2[i])&&((a[p1[i]]==0)||(2*a[p1[i]]!=a[i]))) 
    {
     a[p1[i]]=a[i]/2;
     dodaj(p1[i]);                                                      
    }    
  else if ((a[p1[i]]!=0)||(a[p2[i]]!=0))
        if (a[p1[i]]==0)
        {
          a[p1[i]]=a[i]-a[p2[i]];
          if (a[p1[i]]<0) 
          {
           r=false; k=p1[i];               
          }             
          else dodaj(p1[i]);
        }
        else if (a[p2[i]]==0)
             {
               a[p2[i]]=a[i]-a[p1[i]];
               if (a[p2[i]]<0) 
               {
                 r=false; k=p2[i];               
               }             
               else dodaj(p2[i]);
             }  
  for (j=poc[i];j<poc[i+1];j++)
   if ((a[el1[j]]!=0)||(a[el2[j]]!=0))
    if (a[el1[j]]==0)
    {
      a[el1[j]]=a[el2[j]]+a[i];
      dodaj(el1[j]);               
    }
    else if (a[el2[j]]==0)
         {
          a[el2[j]]=a[el1[j]]-a[i];
          if (a[el2[j]]<0)
          {
           r=false; k=el2[j];               
          }
          else dodaj(el2[j]);
         }
}          
}

void razmeni(int &a,int &b)
{
 int c=a; a=b; b=c;    
}

void sortiraj(int i,int j)
{
if (i<j)
{
 int gg,dg;
 dg=i; gg=j-1; 
 while (dg<gg)
  if (el3[dg]<el3[j])
   dg++;
   else
   {
     razmeni(el1[dg],el1[gg]);
     razmeni(el2[dg],el2[gg]);
     razmeni(el3[dg],el3[gg]);
     gg--;  
   } 
 if (el3[dg]<el3[j]) dg++;
 razmeni(el1[dg],el1[j]); 
 razmeni(el2[dg],el2[j]);
 razmeni(el3[dg],el3[j]); 
 sortiraj(i,dg-1);
 sortiraj(dg+1,j);      
}     
}

int main()
{
    freopen("balegovi.in","r",stdin);
    freopen("balegovi.out","w",stdout);
    scanf("%d",&n);
    for (i=1;i<=n;i++)
    {
         scanf("%d%d",&(p1[i]),&(p2[i]));
         el1[2*i-1]=i; el2[2*i-1]=p1[i]; el3[2*i-1]=p2[i];    
         el1[2*i]=i; el2[2*i]=p2[i]; el3[2*i]=p1[i];
    }
    sortiraj(1,2*n);
    poc[1]=1;
    int tek=1; i=1;
    while (i<=n)
    {
      while ((tek<=2*n)&&(el3[tek]==i)) tek++;
     i++; poc[i]=tek;     
    }
    poc[n+1]=2*n+1; 
    memset(b,0,(n+10)*sizeof(int));
    q=true;
    for (i=1;i<=n;i++)
     if ((p1[i]==p2[i])&&(b[i]==0)&&q)
     {
      memset(a,0,(n+10)*sizeof(int));
      a[i]=256;
      b[i]=1;
      r=true;  
      dodaj(i);
      if (!r)
      {
       a[k]=abs(a[k]);      
       while ((a[i]>1)&&(a[k]>1)&&(a[k]%2==0))
       {
         a[k]=a[k]/2; a[i]=a[i]/2;    
       }      
       printf("%d\n",a[k]+a[i]);
       for (int pom=1;pom<=a[k];pom++)
         printf("%d ",i);
       for (int pom=1;pom<a[i];pom++)
         printf("%d ",k);
       printf("%d\n",k);
       q=false;      
      }  
     }
    return 0; 
}
