Помогите, пожалуйста, решить задачу.
Вершина графа называется точкой сочленения, если её удаление приводит к увеличению количества компонент связности. Найдите все точки сочленения заданного графа.

Есть вот такой код:
program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;

const maxn = 100000;
maxm = 100000;

var i,j,k,n,m : longint;
u,v,next : array [1..2*maxm] of longint;
g,num : array [1..maxn] of longint;
vis : array [1..maxn] of boolean;

procedure Add(i : longint);
begin
next[i] := g[u[i]]; g[u[i]] := i;
end;

function Dfs(x,fr : longint) : longint;
var i,j,t,min : longint;
f : boolean;


begin
inc(k); num[x] := k; vis[x] := true; min := k;
f := false; t := 0; i := g[x];
while i <> 0 do begin
if not vis[v[i]] then begin
j := Dfs(v[i],x); inc(t);
if j < min then min := j;
if j >= num[x] then f := true;
end else if (v[i] <> fr) and (num[v[i]] < min) then min := num[v[i]];

i := next[i];
end;
if fr = 0 then begin
if t > 1 then writeln(x);
end else if f then writeln(x);
Dfs := min;

end;

begin
assign(input,'input.txt'); reset(input);
assign(output,'output.txt'); rewrite(output);
read(n,m);
fillchar(g,sizeof(g),0);
for i := 1 to m do begin
read(u[i],v[i]); Add(i);
u[m+i] := v[i]; v[m+i] := u[i]; Add(m+i);
end;
fillchar(vis,sizeof(vis),false);
k := 0; Dfs(1,0);
close(input); close(output);
end.

Но в output не получается правильного ответа.
Помогите, пожалуйста, найти ошибку.
Заранее огромное спасибо!!!