program dvejetainis_kodas;
  { 32 u‘davinys }
{----------------------------------------------------------}
  const N = 15;   { maksimalus dvejetainio skai‡iaus ilgis }
  type dvejetainis = array [1..N] of 0..1;

  procedure hipoteze (a, b : integer;
                      var teisinga : boolean; { ar teisinga hipotez‚ }
                      var laidas : integer { nutr–kusio laido numeris });
    var dva, dvb : dvejetainis; { a ir b u‘ražyti dvejetaine sistema }
        i        : integer;
    procedure dvejet (a : integer;  var dv : dvejetainis);
      { skai‡ius a u‘ražomas dvejetainiu }
      var i, j : integer;
          tarp : dvejetainis;
    begin
      i := 1;
      while a div 2 <> 0 do    { Ťsimenamos dalybos iž 2 liekanas }
        begin
          tarp[i] := a mod 2;
          a := a div 2;
          i := i + 1;
        end;
      tarp [i] := a mod 2;
      for j := 1 to N do
         dv[j] := 0;
      { gautos liekanos u‘ražomos atvirkž‡ia tvarka }
      for j := 1 to i do
        dv [N - j + 1] := tarp [j]
    end;
  begin
    laidas := 0;
    teisinga := true;
    if a <> b                     { jei a ir b nesutampa }
       then begin
              dvejet (a, dva);    { jie perražomi dvejetainiu pavidalu }
              dvejet (b, dvb);
              i := N;
              while teisinga and (i >= 1) do   { iežkomas nutr–kŠs laidas }
                begin
                  if dva[i] <> dvb[i]
                     then if (dva[i] = 1) and (dvb[i] = 0) and
                             (laidas = 0)
                             then laidas := N - i + 1
                             else teisinga := false;
                  i := i - 1;
                end;
            end
  end;
{----------------------------------------------------------}
  var a, b, laidas : integer;
      teisinga     : boolean;
begin
  write ('­veskite skai‡i— a: ');
  readln (a);
  write ('­veskite skai‡i— b: ');
  readln (b);
  hipoteze (a, b, teisinga, laidas);
  if teisinga
     then  if laidas <> 0
              then begin
                     writeln ('Hipotez‚ teisinga');
                     writeln ('Nutr–kusio laido numeris - ', laidas);
                   end
              else writeln ('Skai‡ius perduotas teisingai')
     else writeln ('Hipotez‚ klaidinga');
end.

