var yx:array[chr(1)..chr(127)]of longint; st,s:array[0..1000000]of char; f:array[0..1000000,0..1]of longint; top,top2,i,j,n:longint; LAST:string; procedure pop; begin if st[top]='+' then begin f[top2,1]:=f[top2-1,0]*f[top2,1]+f[top2-1,1]*f[top2,0]+f[top2-1,1]*f[top2,1]; f[top2,1]:=f[top2,1] mod 10007; f[top2,0]:=f[top2-1,0]*f[top2,0]; f[top2,0]:=f[top2,0]mod 10007; end else begin f[top2,0]:=f[top2-1,0]*f[top2,1]+f[top2-1,1]*f[top2,0]+f[top2-1,0]*f[top2,0]; f[top2,0]:=f[top2,0] mod 10007; f[top2,1]:=f[top2-1,1]*f[top2,1]; f[top2,1]:=f[top2,1]mod 10007; end; dec(top); f[top2-1,1]:=f[top2,1]; f[top2-1,0]:=f[top2,0]; dec(top2); end; begin yx['*']:=2; yx['+']:=1; yx['(']:=1; st[0]:='@'; readln(n); for i:=1 to n do read(s[i]); for i:=1 to n do begin if(s[i]<>'(')and(last<>')')then begin inc(top2); f[top2,1]:=1; f[top2,0]:=1; end; if(s[i]='+')or(s[i]='*')then begin while yx[s[i]]<yx[st[top]] do pop; inc(top); st[top]:=s[i]; last:=''; end else if s[i]=')' then begin while st[top]<>'(' do begin pop; end; dec(top); last:=')'; end else begin inc(top); st[top]:=s[i]; last:=''; end; end; if last<>')' then begin inc(top2); f[top2,1]:=1; f[top2,0]:=1; end; while top>0 do pop; write(f[1,0]); end. /************************************************************** Problem: 2303 User: admin Language: Pascal Result: Wrong Answer ****************************************************************/