{$A+,B-,D+,E+,F-,G-,I+,L+,N-
,O-,P-,Q-,R-,S+,T-,V+,X+}
{$M 16384,0,655360}
program mnozhin2;{Операцў∙ над множинами у виглядў бўтового масиву;
                 кўлькўсть елементўв у множинах обмежена обсягом
                 пам'ятў ПК, операцў∙ над множинами виконуються
                 за допомогою операцўй  алгебри логўки AND, OR,
                 XOR ; всў операцў∙ ї  саморобнў  процедури;
                 ввўд  ї часткове заповнення одиницями бўтового
                 масиву;ўдентифўкатори елементўв ї ∙х адреси у бўтовому
                 (реально байтовому) масивў, недолўк - мексимальна
                 загальна кўлькўсть елементўв маї бути вўдомою, а
                 час виконання операцўй не залежить вўд потужностў
                 множин, бо перебирати хоча б одноразово потрўбне
                 звертання майже до всўх бўтўв масиву; в прикладў
                 програми елементи множини ї цўлў числа вўд 1 до 400,
                 результати операцўй виводяться на екран у
                 виглядў послўдовностў.}
var
  p:byte;
  i,j,k,l,m,n: integer;
  h1,h2,h3,h4,h5: array [1..50] of byte;
  b1,b2,b3,b4: integer;
 label s1,s2,s3,s4,s5,s6;
 function powr2(b:integer) : byte ; {функцўя повертаї двўйку,пўднесену до
                              цўлочисельного степеня b, b>=0 }
 var
 c,d: integer ;
 begin d:=1;if b>0 then for c:=1 to b do begin d:=d*2 end;powr2:=d;
 end;
begin
  assign(input,'k2.in');
  reset(input);
  assign(output,'k2.out');
  rewrite(output);
 { ввўд h1}  writeln(' '); writeln('початок роботи 1');
 for i:=1 to 50 do begin h1[i]:=0 end; {очищення множин}
{зчитування множини з файлу k2.in; множина у файлў маї бути у форматў:
 цўлў числа, вўдокремленў комами, у декўлькох рядках з кўнцевим нульовим
 елементом-ознакою кўнця невпорядковано∙ множини.
 сам нуль до складу множини входити не може}
s1:  read(b1); {write('b1=',b1,' ');} if b1=0 then goto s2;{перевўрка кўнця}
 { b2:=b1 mod 8; {h1[1]:=255; writeln('h1[1]=',h1[1]);}
    { h1[(b1 div 8)+1]:=h1[(b1 div 8)+1] + powr2(b2); h1[1]:=254; h1[2]:=0;h1[3]:=255; }
n:=b1-1; j:=n div 8 + 1; k:= n mod 8; h1[j]:=h1[j]+powr2(k); goto s1;
s2:  writeln(' ');
  writeln(' контрольний вивўд на екран  елементўв масиву h1');
  writeln('при вўдсутностў виводу - множина h1 ї порожня');
 for i:=1 to 400 do begin n:=i-1; j:= n div 8 + 1 ; k:=n mod 8;
 l:=powr2(k);
  if not((h1[j] and l) = 0) then write(i,' ');
 { writeln('i=',i,' ','l=',l,' ',h1[j],' ',h1[j+1]); }
                    end;
  assign(input,'k22.in');
  reset(input);
{  assign(output,'k.out');
  rewrite(output); }
 { ввўд h2}  writeln(' '); writeln('початок роботи 2');
 for i:=1 to 50 do begin; h2[i]:=0 end; {очищення множин}
s3:  read(b1); {write('b1=',b1,' ');} if b1=0 then goto s4;
 { b2:=b1 mod 8; {h2[1]:=255; writeln('h2[1]=',h2[1]);}
    { h1[(b1 div 8)+1]:=h1[(b1 div 8)+1] + powr2(b2); h1[1]:=254; h1[2]:=0;h1[3]:=255; }
n:=b1-1; j:=n div 8 + 1; k:= n mod 8; h2[j]:=h2[j]+powr2(k); goto s3;
s4:  writeln(' ');
  writeln(' контрольний вивўд на екран  елементўв масиву h2');
  writeln('при вўдсутностў виводу - множина h2 ї порожня');
 for i:=1 to 400 do begin n:=i-1; j:= n div 8 + 1 ; k:=n mod 8;
 l:=powr2(k);
  if not((h2[j] and l) = 0) then write(i,' ');
 { writeln('i=',i,' ','l=',l,' ',h2[j],' ',h2[j+1]); }
                    end; writeln(' ');  writeln('початок роботи 3');
 {виконання об'їднання множин h2  та h3 з формуванням множини h3}
  for i:=1 to 50 do h3[i]:=h1[i] or h2[i]; writeln(' ');
  writeln(' вивўд на екран  елементўв об"їднання множин h1 та h2 ');
   writeln('при вўдсутностў виводу - множина порожня');
 for i:=1 to 400 do begin n:=i-1; j:= n div 8 + 1 ; k:=n mod 8;
 l:=powr2(k);
  if not((h3[j] and l) = 0) then write(i,' ');
 { writeln('i=',i,' ','l=',l,' ',h2[j],' ',h2[j+1]); }
                    end; writeln(' ');  writeln('початок роботи 4');
{виконання перетину множин h1  та h2 з формуванням множини h4}
  for i:=1 to 50 do h4[i]:=h1[i] and h2[i]; writeln(' ');
    writeln(' вивўд на екран  елементўв перетину множин h1 та h2 ');
   writeln('при вўдсутностў виводу - множина порожня');
 for i:=1 to 400 do begin n:=i-1; j:= n div 8 + 1 ; k:=n mod 8;
 l:=powr2(k);
  if not((h4[j] and l) = 0) then write(i,' ');
 { writeln('i=',i,' ','l=',l,' ',h2[j],' ',h2[j+1]); }
                    end; writeln(' ');  writeln('початок роботи 5');
 {виконання cим.рўзниця множин h1  та h2 з формуванням множини h5}
  for i:=1 to 50 do h4[i]:=h1[i] xor h2[i]; writeln(' ');
  writeln(' вивўд на екран  елементўв сим.рўзницў множини h1 та h2 ');
  writeln('при вўдсутностў виводу - множина порожня');
 for i:=1 to 400 do begin n:=i-1; j:= n div 8 + 1 ; k:=n mod 8;
 l:=powr2(k);
  if not((h4[j] and l) = 0) then write(i,' ');
 { writeln('i=',i,' ','l=',l,' ',h2[j],' ',h2[j+1]); }
                    end;
 writeln(' ');  writeln('початок роботи 6');
 {виконання рўзницў множин h1  та h2 з формуванням множини h6}
  for i:=1 to 50 do h4[i]:=h1[i] and (h2[i] xor 255); writeln(' ');
    writeln('вивўд на екран  елементўв рўзницў множин h1 та h2 ');
  writeln('при вўдсутностў виводу - множина порожня');
 for i:=1 to 400 do begin n:=i-1; j:= n div 8 + 1 ; k:=n mod 8;
 l:=powr2(k);
  if not((h4[j] and l) = 0) then write(i,' ');
 { writeln('i=',i,' ','l=',l,' ',h2[j],' ',h2[j+1]); }
                    end;
  writeln(' ');  writeln('початок роботи 7');
 {перевўрка множина h1 на порожнўсть, унўверсальнўсть або загальнўсть}
  p:=0; for i:=1 to 50 do p:=h1[i] or p; writeln(' ');
  if p=0 then writeln('множина h1 ї порожня')
  else begin p:=255;for i:=1 to 50 do p:=p and h1[i];
  if p=255 then writeln('множина h1 ї унўверсвльна')else
  writeln('множина h1 ї множина загального типу');

end
end.



