uses Crt, Graph;
var Gd, Gm: Integer;
    d,i,j,ii,k,c,l,b: integer;
    dmas: array[0..639] of real{integer};

procedure SetDepthMas(j:integer);
var i,k:integer;
    r2:real;
begin
for i:=0 to 639 do dmas[i]:=0;
if (100 <= j) and (j <= 300)
then begin
     k:=10000-sqr(200-j);
     for i:=-100 to 100
     do begin r2:=k-sqr(i);
              if r2 >= 0 then dmas[300+i]:=10+{round}(sqrt(r2)) /{div} 6
        end
     end;
end;

begin
 write('l b: '); readln(l,b);

 Gd := Detect; InitGraph(Gd, Gm, 'c:\bp\bgi');
 if GraphResult <> grOk then  Halt(1);

 for k:=0 to 15 do setpalette(k,k);
 setrgbpalette(1,63,63,63);

 for i:=0 to 640 div l
 do for j:=0 to 10
    do bar(l*i,48*j,l*i+10,48*j+20);
 ReadKey;

 randomize;
 if b < 3 then begin
 for i:=0 to l-1 do for j:=0 to 479 do
  begin if keypressed then if Ord(readkey) = 27 then halt;
        c:=random(2); for k:=0 to 640 div l do putpixel(i+k*l,j,c)
  end;
 ReadKey;
               end;

 case b of
 1: begin
 for j:=100 to 150
 do begin
    for i:=30 to 520
    do begin c:=getpixel(i,j); putpixel(i+l-10,j,c) end;
    for i:=521 to 640-l
    do begin c:=getpixel(i,j); putpixel(i+l,j,c) end;
    end;
 for j:=151 to 250
 do begin
    for i:=130 to 200
    do begin c:=getpixel(i,j); putpixel(i+l-10,j,c) end;
    for i:=201 to 210
    do begin c:=random(2); putpixel(i+l-10,j,c) end;
    for i:=201 to 640-l
    do begin c:=getpixel(i,j); putpixel(i+l,j,c) end;
    end;
 for j:=251 to 400
 do begin
    for i:=130 to 330
    do begin c:=getpixel(i,j); putpixel(i+l-(10*(400-j) div 150),j,c) end;
    for i:=331 to 640-l
    do begin c:=getpixel(i,j); putpixel(i+l,j,c) end;
    end;
    end;
 2: begin
 for j:=50 to 480
 do begin
    k:=7+round(3*sin(pi*j/90));
    for i:=30 to 520
    do begin c:=getpixel(i,j); putpixel(i+l-k,j,c) end;
    for i:=521 to 640-l
    do begin c:=getpixel(i,j); putpixel(i+l,j,c) end;
    end;
    end;
 3: begin
    for j:=0 to 479
    do begin
       if keypressed then if Ord(readkey) = 27 then halt;
       SetDepthMas(j);
       for i:= 0 to l-1
       do begin c:=random(2); putpixel(i,j,c) end;
       ii:=l;
       for i:= 0 to 639
       do begin
          d:=round(2*l*(100-dmas[i]) /{div} (200-dmas[i]));
          if i+d > ii+1
          then for k:=ii+1 to i+d-1
               do begin c:=random(2); putpixel(k,j,c) end;
          ii:=i+d;
          c:=getpixel(i,j); putpixel(ii,j,c)
          end
       end
    end;
 end;
 ReadKey;

 CloseGraph;
end.


