program adjlist;
uses crt;
const maxV = 'm';
type link = ^node;
     node = record
              v    : char;
              next : link;
            end;

var V,E,i      : integer;
    t,z        : link;
    adj_liste  : array['a'..maxV] of link;
    v1,v2,j    : char;


procedure print_adj_liste(Knoten : char);
var k: char;
    h: link;
begin
 new(h);
 for k:='a' to Knoten do
  begin
   h:=adj_liste[k];
   write('Knoten ',k,' :  ');
   while  (h^.next<>h ) do begin
                            write(h^.v ,'---');
                            h:=h^.next;
                           end;
   writeln('ende');
  end;
end;


begin
 clrscr;
 write('Anzahl der Knoten und Kanten des Graphen :  '); readln(V,E);
 writeln;writeln;
 new(z);
 z^.next:=z;
 for j:='a' to maxV do adj_liste[j]:=z;

 for i:=1 to E do
  begin
   write('die ',i:2,'.  Kante geht von  :  '); readln(v1);
   write('                   nach  :  ');      readln(v2);
   new(t); t^.v:=v1 ; t^.next:=adj_liste[v2] ; adj_liste[v2]:=t ;
   new(t); t^.v:=v2 ; t^.next:=adj_liste[v1] ; adj_liste[v1]:=t ;
  end;

 readln;
 clrscr;
 print_adj_liste(maxV);
 readln;
end.