WA on #1, where am I wrong?
type
TArray=array[1..1000] of integer;
var
code:array[1..1000] of string;
num,temp:TArray;
i,n,nc:integer;
s,t:string;
function match(a,b:TArray):Boolean;
var
i:integer;
ok:Boolean;
begin
ok:=true;
for i:=1 to nc do
ok:=ok and (a[i]=b[i]);
match:=ok
end;
procedure init(var a:TArray);
begin
fillchar(a,sizeof(a),0)
end;
function decode(s:string):integer;
var
i:integer;
begin
i:=0;
repeat
inc(i)
until (i=nc+1) or (s=code[i]);
if i=nc+1 then
begin
inc(nc);
code[nc]:=s
end;
decode:=i
end;
procedure analyze(s:string;var a:TArray);
var
i,mul,count:integer;
sp,c:string;
begin
init(a);
repeat
if pos('+',s)>0 then
begin
sp:=copy(s,1,pos('+',s)-1);
delete(s,1,pos('+',s))
end
else
begin
sp:=s;
s:=''
end;
mul:=0;
i:=1;
while ('0'<=sp[i]) and (sp[i]<='9') do
begin
mul:=10*mul+ord(sp[i])-ord('0');
inc(i)
end;
if mul=0 then
mul:=1;
while i<=length(sp) do
begin
if (sp[i]='(') or (sp[i]=')') then
inc(i)
else
if ('A'<=sp[i]) and (sp[i]<='Z') then
begin
c:=sp[i];
inc(i);
if ('a'<=sp[i]) and (sp[i]<='z') then
begin
c:=c+sp[i];
inc(i)
end;
while (sp[i]='(') or (sp[i]=')') do
inc(i);
count:=0;
while ('0'<=sp[i]) and (sp[i]<='9') do
begin
count:=10*count+ord(sp[i])-ord('0');
inc(i)
end;
if count=0 then
count:=1;
a[decode(c)]:=a[decode(c)]+mul*count
end
end
until s='';
end;
begin
assign(input,'');
reset(input);
readln(s);
nc:=0;
analyze(s,num);
readln(n);
for i:=1 to n do
begin
readln(t);
analyze(t,temp);
if match(num,temp) then
writeln(s,'==',t)
else
writeln(s,'!=',t)
end;
close(input);
end.