unit def24;
interface
const l = 30;
type
  colors = (red,yellow,green,black);
const
  s_colors: array[colors] of string =
    ('red','yellow','green','black');

type
   telem = record
              key  : integer;
	      data : colors ;
           end;	
   stack = record m : array[1..l] of telem;
               hill : integer
	   end;
procedure init(var s:stack);
function empty(var s:stack):boolean;
function top(var s:stack):telem;
procedure get(var s:stack);
procedure print(var s:stack);
function kolvo(var s:stack):integer;
procedure put(var s:stack; t:telem);

implementation

procedure init(var s:stack);
begin
   s.hill:=0
end;

function empty(var s:stack):boolean;
begin
   empty:=(s.hill=0)
end;

function top(var s:stack):telem;
begin
   top:=s.m[s.hill]
end;

procedure get(var s:stack);
begin
   s.hill:=s.hill-1;
end;

procedure print(var s:stack);
var i:integer;
begin
   for i:=s.hill downto 1 do
      // writeln('Key: ',s.m[i].key:2,'. Data: ',s.m[i].data,'.')
      writeln('Key: ',s.m[i].key:2,'. Data: ',s_colors[s.m[i].data],'.')
end;

function kolvo(var s:stack):integer;
begin
   kolvo:=s.hill
end;

procedure put(var s:stack; t:telem);
begin
   if s.hill<l then begin s.hill:=s.hill+1; s.m[s.hill]:=t end
   else writeln('Stack is full!')
end; { put }

end.