#include<bits/stdc++.h>
using namespace std;
string s;
inline string add(string a,string b)
{
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
if(a.length()<b.length())swap(a,b);
int tmp1,tmp2;
int cjr=b.length();
for(int i=0;i<a.length()-cjr;i++)b+='0';
for(int i=0;i<a.length();i++)
{
tmp1=int(a[i])-48;
tmp2=int(b[i])-48;
int tmp3=tmp1+tmp2;
a[i]=tmp3%10+48;
char c=tmp3/10+48;
if(i!=a.length()-1)a[i+1]+=(tmp3/10);
else {a+=c;break;}
}
if(a[a.length()-1]=='0')a.erase(a.length()-1,1);
int len=a.length();
string ans="";
for(int i=0;i<len;i++)ans+=a[i];
reverse(ans.begin(),ans.end());
return ans;
}
inline int cmpstr(string a,string b)
{
if(a.length()>b.length())return 0;
else if(a.length()<b.length())return 1;
for(int i=0;i<a.length();i++)
{
if(a[i]>b[i])return 0;
if(a[i]<b[i])return 1;
}
return 2;
}
inline void times(string &s);
inline void minus_plus(string &s)
{
for(int i=0;i<s.length();i++)
{
if(s[i]=='-')
{
string beg="",hmd="";
int kh1=0;
bool xlhl=false;
for(int j=i-1;j>=0;j--)
{
if(s[j]=='(')kh1--;
if(s[j]==')')kh1++,xlhl=true;
if(kh1==0&&(s[j]=='+'||s[j]=='-'))
{
break;
}
beg+=s[j];
}
int flen=beg.length();
reverse(beg.begin(),beg.end());
if(xlhl==true)
{
times(beg);
}
int tlen=beg.length();
int kh2=0;
bool lky=false;
for(int j=i+1;j<s.length();j++)
{
if(s[j]=='(')lky=true,kh2++;
if(s[j]==')')kh2--;
if(kh2==0&&(s[j]=='+'||s[j]=='-'))break;
hmd+=s[j];
}
int flen2=hmd.length();
if(lky==true)times(hmd);
int tlen2=hmd.length();
s.erase(i-flen,flen);
s.erase(i-flen+1,flen2);
s.insert(i-flen,beg);
s.insert(i-flen+tlen+1,hmd);
string ai_whk="";
for(int wcao=0;cmpstr(beg,hmd)==1;beg=add(beg,"1"),wcao++)
{
if(wcao)ai_whk+=beg;
}
s.erase(i-flen+tlen,1);
s.insert(i-flen+tlen,ai_whk);
}
}
for(int i=0;i<s.length();i++)
{
if(s[i]=='+')
{
bool db=false;
int kh3=0;
for(int j=i-1;j>=0;j--)
{
if(s[j]=='(')kh3--;
if(s[j]==')')db=true,kh3++;
if((s[j]=='+'||s[j]=='-')&&kh3==0)break;
}
int cj1=0,cj2=0;
if(db==true)
{
string lxl="";
int kh4=0;
for(int j=i-1;j>=0;j--)
{
if(s[j]=='(')kh4--;
if(s[j]==')')kh4++;
if((s[j]=='+'||s[j]=='-')&&kh4==0)break;
lxl+=s[j];
}
int pjl=lxl.length();
cj1=pjl;
reverse(lxl.begin(),lxl.end());
times(lxl);
cj2=lxl.length();
s.erase(i-pjl,pjl);
s.insert(i-pjl,lxl);
}
bool dwb=false;
int kh5=0;
for(int j=i+1;j<s.length();j++)
{
if(s[j]==')')kh5--;
if(s[j]=='(')dwb=true,kh5++;
if((s[j]=='+'||s[j]=='-')&&kh5==0)break;
}
if(dwb==true)
{
string ddd="";
int kh6=0;
for(int j=i+1;j<s.length();j++)
{
if(s[j]=='(')kh6++;
if(s[j]==')')kh6--;
if((s[j]=='+'||s[j]=='-')&&kh6==0)break;
ddd+=s[j];
}
int cengj=ddd.length();
reverse(ddd.begin(),ddd.end());
times(ddd);
s.erase(i+1,cengj);
s.insert(i,ddd);
}
s.erase(i-cj1+cj2,1);
}
}
}
inline void times(string &s)
{
for(int i=0;i<s.length();i++)
{
string dgurunb,con,cont,pj;
int kkk;
if(s[i]=='(')
{
dgurunb="";
for(int j=i-1;j>=0;j--)
{
if(!(s[j]>='0'&&s[j]<='9'))break;
dgurunb+=s[j];
}
reverse(dgurunb.begin(),dgurunb.end());
kkk=1;
con="";
for(int j=i+1;j<s.length();j++)
{
if(s[j]==')'&&kkk==1)break;
if(s[j]==')')kkk--;
if(s[j]=='(')kkk++;
con+=s[j];
}
s.erase(i-dgurunb.length(),dgurunb.length()+2+con.length());
minus_plus(con);
times(con);
cont="";
pj="0";
for(;cmpstr(pj,dgurunb)==1;pj=add(pj,"1"))
{
cont+=con;
}
s.insert(i-dgurunb.length(),cont);
}
}
}
long long ans=0;
inline void long_mod()
{
for(int i=0;i<s.length();i++)
{
ans=(ans*10+s[i]-48)%1000000007;
}
}
int main()
{
ios::sync_with_stdio(false);
cin>>s;
times(s);
minus_plus(s);
long_mod();
printf("%d",ans);
}