program directoryes; type stringvektor = Array[1..100] of String; var f,g:Text; C:Char; filename,path,foldername,fname:String; n,i:Integer; pathvektor:stringvektor; p:Integer;{the index of the pathvektor} zjv:Array[1..1600] of 0..1; {zarojeles vektor} helye,zny,zz:Integer; { a zarojeles (nyiltak illetve zartak) vektor szamlaloja} mch:set of Char; fileset:set of Char; dir:Boolean; V:Array[1..1601] of Char; procedure rendez(var v:Stringvektor); var rendezett:boolean; i:Integer; s:String; aux:String; begin repeat rendezett:=true; for i:=1 to p-1 do begin {s:=v[i]; for j:=1 to length(s) do begin end;} if v[i]>v[i+1] then begin aux:=v[i]; v[i]:=v[i+1]; v[i+1]:=aux; rendezett:=false; end; end until rendezett=true; end; begin Assign(f,'dir.in'); Assign(g,'dir.out'); Reset(f); ReWrite(g); i:=0; while not eof(f) do begin Read(f,C); Inc(i); v[i]:=C; end; n:=i; {lets get procesing} {init} foldername:=''; filename:=''; mch:=['A'..'Z']; fileset:=['a'..'z']; zny:=0; zz:=0; dir:=false; p:=0; {kezdetbol a nyitott zarojelek szama egyenlo a zart zarojelek szamaval vagyis 0} {this is the fun part:} for i:=1 to n do begin C:=v[i]; if C in mch then begin foldername:=foldername+C; end; if C in ['('] then begin path:=path+foldername+'\'; fname:=foldername; foldername:=''; Inc(zny); zjv[zny]:=1; end; if C in [')'] then begin Inc(zz); zjv[zz]:=0; if v[i-1] <> '(' then begin {ignore emphty folders} if filename<>'' then begin Inc(p); pathvektor[p]:=path+filename; filename:=''; end; helye:=pos(fname,path); Delete(path,helye,length(fname)+1); end else begin helye:=pos(fname,path); Delete(path,helye,length(fname)+1); end; end; if C in fileset then begin filename:=filename+C; { pathvektor[p]:=pathvektor[p]+path+C;} end; if C in [','] then begin if filename<>'' then begin Inc(p); pathvektor[p]:=path+filename; filename:=''; end; end; if C in ['0'..'9'] then begin if v[i-1] in mch then begin foldername:=foldername+C; end; if v[i-1] in fileset then begin filename:=filename+C; { pathvektor[p]:=pathvektor[p]+path+C;} end; end; end; {Ok lets pray that this worked} {now lets sort it into alphabetical order} rendez(pathvektor); {lets write this out} WriteLn(g,p); for i:=1 to p do begin WriteLn(g,pathvektor[i]); end; Close(f); Close(g); end.