[an error occurred while processing this directive]
Listing PARITATE.PAS 
 Program parity; 
 const ni='parity.in'; 
 no='parity.out'; 
 nmax=5000; 
 type cell=record 
 s,f:Longint; 
 p:Byte; 
 end; 
 var f:Text; 
 aux:cell; 
 a:array [1..nmax] of cell; 
 n,pas,i,start,finish,l,k:Longint; 
 vali:string; 
 procedure stop(m:longint); 
 begin 
 Close(f); 
 Assign(f,no); 
 Rewrite(f); 
 Writeln(f,m); 
 Close(f); 
 Halt 
 end; 
 
 procedure work; 
 begin 
 for i:=1 to length(vali) do 
 vali[i]:=upcase(vali[i]); 
 l:=l+1; 
 a[l].s:=start; 
 a[l].f:=finish; 
 if pos('EVEN',vali)>0 
then 
a[l].p:=0 
 else a[l].p:=1; 
 k:=l-1; 
 while (k>0) and (a[k].s>=a[l].s) 
do 
k:=k-1; 
 k:=k+1; 
 while (k<l) and (a[k].s=a[l].s) 
do 
 begin
 if a[k].f>a[l].f 
then 
 begin
 aux:=a[k]; 
 a[k]:=a[l]; 
 a[l]:=aux 
 end; 
 if a[k].f=a[l].f 
then 
 begin
 if a[k].p<>a[l].p 
then 
stop(pas-1); 
 l:=l-1; 
 k:=l 
 end; 
 if a[k].f<a[l].f 
then 
 begin
 a[l].s:=a[k].f+1; 
 a[l].p:=abs(a[l].p-a[k].p) 
 end; 
 while (k<l) and (a[k].s<a[l].s) 
do 
k:=k+1 
 end; 
 while k<l 
do 
 begin
 aux:=a[k]; 
 a[k]:=a[l]; 
 a[l]:=aux; 
 k:=k+1 
 end 
 end; 
 procedure load; 
 begin 
 l:=0; 
 Assign(f,ni);reset(f); 
 Readln(f); 
 Readln(f,n); 
 for pas:=1 to n 
do 
 begin
 Read(f,start,finish); 
 Readln(f,vali); 
 work 
 end; 
 Close(f); 
 stop(n) 
 end; 
 
 Begin  
 load 
 End. 

[cuprins]