Cod sursa(job #466380)

Utilizator irene_mFMI Irina Iancu irene_m Data 26 iunie 2010 13:48:00
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <cstdio>
#define MaxN 100024
#define infile "mesaj4.in"
#define outfile "mesaj4.out"

int a[MaxN],b[MaxN];
int T;
int uz[MaxN];
int N,M;

struct edge{
      int x;
      edge *next;
}     *G[MaxN];

void add(int a,int b)
{
      edge *aux=new edge;
      aux->x=b; aux->next=G[a]; G[a]=aux;
}

void read()
{
      int a,b;
      scanf("%d%d",&N,&M);
      for(;M;M--)
      {
            scanf("%d%d",&a,&b);
            add(a,b); add(b,a);
      }
}

void dfs(int nod)
{
      edge *q;

      for(q=G[nod];q;q=q->next)
            if(!uz[q->x])
            {
                  a[++T]=nod;
                  b[T]=q->x;
                  uz[q->x]=1;
                  dfs(q->x);
            }
}

int verif()
{
      int i;
      for(i=1;i<=N;i++)
            if(!uz[i])
                  return 0;
      return 1;
}

void write()
{
      int i;
      if(verif())
      {
            printf("%d\n",2*T);
            for(i=T;i>=1;i--)
                  printf("%d %d\n",b[i],a[i]);
            for(i=1;i<=T;i++)
                  printf("%d %d\n",a[i],b[i]);
      }
      else
            printf("-1\n");
}


int main()
{
      freopen(infile,"r",stdin);
      freopen(outfile,"w",stdout);

      read();
      uz[1]=1;
      dfs(1);
      write();

      fclose(stdin);
      fclose(stdout);
      return 0;
}