program sablonai;
   { Jaunesni—j— grup‚ }
   const PRAD = 'SABLON.DAT';
         REZ  = 'SABLON.REZ';

  procedure zvaigzdutes (var sabl: string);
   { žablone ižtisines ‘vaig‘du‡i— ir klaustuk— sekas
     pakei‡ia viena ‘vaig‘dute su reikiama klaustuk— seka }
     var i, raide, zva: integer;
  begin
    raide := 0; { ties kuria vieta paskutin kart… sutikta raid‚(skaitmuo) }
    zva := 0;   { ties kuria vieta paskutin kart… sutikta ‘vaig‘dut‚ }
    i := 1;
    while i <= length(sabl) do
      if (sabl[i] <> '?') and (sabl[i] <> '*')
         then begin { sutikome raidŠ ar skaitmen }
                 raide := i; i := i + 1;
              end
      else if sabl[i] = '?'then i := i + 1
             { sutikome klaustuk… }
      else { sutikome ‘vaig‘dutŠ }
        if zva > raide { tai antra ‘vaig‘dut‚ žioje sekoje }
           then delete (sabl, i, 1)
           else begin { pirma ‘vaig‘dut‚ ‘vaig‘du‡i—-klaustuk— sekoje }
                  zva := i;
                  i := i + 1;
                end;
  end; { ‘vaig‘dut‚s }

  procedure zv_klaust (var sabl: string);
    { simbolius '*?' kei‡ia simboliais '?*' }
    var vieta: integer;
  begin
    while pos('*?', sabl) > 0 do
      begin
        vieta := pos('*?', sabl);
        sabl[vieta] := '?'; sabl[vieta+1] := '*';
      end;
  end; { ‘v_klaust }

  function ekvivalentu (sabl1, sabl2: string): boolean;
    { patikrina, ar žablonai ekviavelnt–s }
  begin
    sabl1 := sabl1 + '.'; { apsisaugoma nuo iž‚jimo iž r‚‘i— }
    sabl2 := sabl2 + '.';
    zvaigzdutes (sabl1);  { pertvarkomos ‘vaig‘du‡i—-klaustuk— sekos }
    zvaigzdutes (sabl2);
    zv_klaust (sabl1);    { simbolius '*?' kei‡ia simboliais '?*' }
    zv_klaust (sabl2);
    ekvivalentu := sabl1=sabl2;
  end; { ekvivalentu }

  procedure skaityti (var sabl1, sabl2: string);
    var f: text;
  begin
    assign (f, PRAD);
    reset (f);
    readln (f, sabl1);
    readln (f, sabl2);
    close (f);
  end; { skaityti }

  procedure rasyti (rezult: boolean);
    var f: text;
  begin
    assign (f, REZ);
    rewrite (f);
    if rezult then writeln (f, 'TAIP')
              else writeln (f, 'NE');
    close (f);
  end; { ražyti }

  var sabl1, sabl2: string;
      rezult: boolean;
begin
  skaityti (sabl1, sabl2);
  rezult := ekvivalentu (sabl1, sabl2);
  rasyti (rezult);
end.