Listing GRANICER.PAS 
Program Graniceri; 
const maxn=1000; 
type date=record 
timp:Integer; 
sens:string[2]; 
nume:string[40] 
end; 
var i,j,n,m,buc:Integer; c,orice:Char; 
f:array [1..9] of Text; 
exista:Boolean; g,h:Text; 
trece:array [1..9] of date; 
trecut:array [1..maxn] of date; 
Function mai_exista_date:Boolean; 
var i:Integer; 
begin 
i:=1; 
while (i<=n) and (trece[i].timp=1000) 
do i:=i+1; 
mai_exista_date:=(i<=n) 
end; 
Procedure cu_data_cea_mai_mica 
(var i:Integer; n:Integer); 
var j:Integer; 
begin 
i:=1; 
for j:=2 to n do 
if trece[i].timp>trece[j].timp then i:=j 
end; 
Procedure caut_data_prec(i,buc:Integer; 
var exista:Boolean; var j:Integer); 
begin 
j:=1; 
while (j<=buc) 
and (trece[i].nume<>trecut[j].nume) 
do j:=j+1; 
exista:=j<=buc 
end; 
Begin 
Write('Cate puncte de frontiera exista?'); 
Readln(n); Writeln; 
c:='1'; 
for i:=1 to n do 
begin 
Assign(f[i],'VAMA.IN'+c); 
Reset(f[i]); 
if Eof(f[i]) 
then trece[i].timp:=1000 
else 
with trece[i] do 
Readln(f[i],timp,orice, 
sens,orice,nume); 
c:=Succ(c) 
end; 
Assign(g,'AFARA.OUT'); Rewrite(g); 
Assign(h,'FRAUDE.OUT'); Rewrite(h); 
buc:=0; 
while mai_exista_date do 
begin 
cu_data_cea_mai_mica(i,n); 
caut_data_prec(i,buc,exista,j); 
if exista 
then 
if trece[i].sens=trecut[j].sens 
then Writeln(h,trece[i].nume) 
else trecut[j]:=trece[i] 
else 
begin 
buc:=buc+1; 
trecut[buc]:=trece[i] 
end; 
if Eof(f[i]) 
then trece[i].timp:=1000 
else 
with trece[i] do Readln(f[i],timp,orice, 
sens,orice,nume) 
end; 
for i:=1 to buc do 
if trecut[i].sens='OU' 
then Writeln(g,trecut[i].nume); 
Close(g); 
Close(h); 
for i:=1 to n do Close(f[i]) 
End.