Type  
  Day = (mon,tue,wed,thu,fri,sat,sun);  
  Days = set of Day;  
 
Procedure PrintDays(W : Days);  
Const  
  DayNames : array [Day] of String[3]  
           = ('mon','tue','wed','thu',  
              'fri','sat','sun');  
Var  
  D : Day;  
  S : String;  
begin  
  S:='';  
  For D:=Mon to Sun do  
    if D in W then  
      begin  
      If (S<>'') then S:=S+',';  
      S:=S+DayNames[D];  
      end;  
  Writeln('[',S,']');  
end;  
 
Var  
  W : Days;  
 
begin 
   W:= [low(Days)..high(Days)]; // all elements of the set or inverse of the empty set []
   PrintDays(W);
   W:=[mon,tue]+[wed,thu,fri]; // equals [mon,tue,wed,thu,fri]  
   PrintDays(W);  
   W:=[mon,tue,wed]-[wed];     // equals [mon,tue]  
   PrintDays(W);  
   W:=[mon,tue,wed]-[wed,thu];     // also equals [mon,tue]  
   PrintDays(W);  
   W:=[mon,tue,wed]*[wed,thu,fri]; // equals [wed]  
   PrintDays(W);  
   W:=[mon,tue,wed]><[wed,thu,fri]; // equals [mon,tue,thu,fri]  
   PrintDays(W);  
end.