type massive=array[1..100] of string;
  procedure read_data(fn:string;
                      var mas:massive;
                          n:integer);
   var f:text;
    begin
     assign(f,fn);
     reset(f);
     n:=0;
     while not eof(f) do
      begin
       n:=n+1;
       readln(f,mas[n]);
      end;
     close(f);
    end;
  procedure write_data(fn:string;
                       var mas:massive;
                           n:integer);
   var f:text;
       i:integer;
    begin
     assign(f,fn);
     rewrite(f);
      for i:=1 to n do
       writeln(f,mas[i]);
     close(f);
    end;
  procedure sort_data(var mas:massive;
                      n:integer);
   var i,j:integer;
       exchange:string;
    begin
     for i:=1 to n-1 do
      for j:=1 to n-i do
       if mas[j]<mas[j+1] then
        begin
         exchange:=mas[j];
         mas[j]:=mas[j+1];
         mas[j+1]:=exchange;
        end;
    end;
    var mas:massive;
  procedure sort(fn:string);
   var n:integer;
    begin
     read_data(fn,mas,n);
     sort_data(mas,n);
     write_data(fn,mas,n);
    end;
  procedure copy_files(last:string;
                       var f,f_res:text);
   var s:string;
   begin
    while not eof(f) do
     begin
      readln(f,s);
       if (last<>'')and (last>s) then
        begin
         writeln(f_res,last);
         last:='';
        end;
      writeln(f_res,s);
     end;
   end;
  function test_files(a:string;
                      var f1,f2,f_res:text):boolean;
   begin
    test_files:=true;
    if eof(f1) then
     begin
      copy_files(a,f2,f_res);
      test_files:=false;
     end;
    if eof(f2) then
      begin
       copy_files(a,f1,f_res);
       test_files:=false;
      end;
    end;
  procedure merge_files(var f1,f2,f_res:text);
   var a,b:string;
       do_it:boolean;
    begin
     readln(f1,a);
     readln(f2,b);
     do_it:=true;
      while do_it do
       begin
        if a>b then
         begin
          writeln(f_res,a);
          writeln(a);
           if eof(f1) then
            begin 
             do_it:=false;
             a:='';
            end
           else readln(f1,a);
         end
        else 
         begin
           writeln(f_res,b);
           writeln(b);
            if eof(f2) then
             begin 
              do_it:=false;
              b:=' ';
             end
            else readln(f2,b);
         end;
      end;
       if a='' then
        test_files(b,f1,f2,f_res)
       else
        test_files(a,f1,f2,f_res);
  end;
  procedure merge(fn1,fn2,fn_res:string);
   var
    f1,f2,f_res:text;
    a,b:string;
     begin
      assign(f1,fn1);
      reset(f1);
      assign(f2,fn2);
      reset(f2);
      assign(f_res,fn_res);
      rewrite(f_res);
       if test_files('',f1,f2,f_res) then
        merge_files(f1,f2,f_res);
      close(f1);
      close(f2);
      close(f_res);
     end;
  
  var a,b,c:text;
   begin
    sort('a.txt');
    sort('b.txt');
    merge('a.txt','b.txt','c.txt');
   end.