Pagini recente » Cod sursa (job #1317880) | Cod sursa (job #1048479) | Cod sursa (job #2726781) | Cod sursa (job #2987986) | Cod sursa (job #300811)
Cod sursa(job #300811)
type lista=^element;
element=record
i:longint;
a:lista;
end;
rec=record
x,y:longint;
end;
var v:array[1..100000] of lista;
xx,i,n,m,x,y,ls,nr:longint;
st:array[1..100000] of rec;
viz,l,nv,t:array[1..100000] of longint;
p:lista;
sol:array[1..100000] of lista;
procedure adaugare(x,y:longint);
begin
inc(ls); st[ls].x:=x; st[ls].y:=y;
end;
procedure df(nod:longint);
var w,q:lista;
begin
viz[nod]:=1;
l[nod]:=nv[nod];
w:=v[nod];
while w<>nil do
begin
if (w^.i<>t[nod])and(nv[nod]>nv[w^.i]) then adaugare(w^.i,nod);
if viz[w^.i]=0 then
begin
nv[w^.i]:=nv[nod]+1;
t[w^.i]:=nod;
df(w^.i);
if l[w^.i]<l[nod] then
l[nod]:=l[w^.i];
if nv[nod]<=l[w^.i] then
begin
inc(nr);
x:=st[ls].x; y:=st[ls].y;xx:=x;
new(q); q^.i:=x; q^.a:=sol[nr]; sol[nr]:=q;
new(q); q^.i:=y; q^.a:=sol[nr]; sol[nr]:=q;
dec(ls);
if not(((x=w^.i)and(y=nod))or((x=nod)and(y=w^.i))) then
repeat
begin
x:=st[ls].x; y:=st[ls].y;
dec(ls);
if y<>xx then begin
new(q); q^.i:=y; q^.a:=sol[nr]; sol[nr]:=q;
end;
end;
until ((x=w^.i)and(y=nod))or((x=nod)and(y=w^.i));
end;
end
else
if (w^.i<>t[nod])and(nv[w^.i]<l[nod]) then l[nod]:=nv[w^.i];
w:=w^.a;
end;
end;
begin
assign(input,'biconex.in'); reset(input);
assign(output,'biconex.out'); rewrite(output);
readln(n,m);
for i:=1 to m do
begin
readln(x,y);
new(p);
p^.i:=y; p^.a:=v[x]; v[x]:=p;
new(p);
p^.i:=x; p^.a:=v[y]; v[y]:=p;
end;
nr:=0;
for i:=1 to n do
begin
nv[i]:=1;
df(i);
end;
writeln(nr);
for i:=1 to nr do
begin
p:=sol[i];
while p<>nil do
begin
write(p^.i, ' '); p:=p^.a;
end;
writeln;
end;
close(output);
close(input);
end.