#include<bits/stdc++.h>
using namespace std;

using ll=long long;
ll MOD=1e9+7;

ll formula(string &s,int& p);

ll num(string &s,int& p){
  ll res=0;
  while(p!=s.size() && isdigit(s[p])){
    res*=10;
    res+=s[p]-'0';
    p++;
  }
  return res;
}

ll term(string &s,int &p){
  if(s[p]=='S'){
    p++;
    assert(s[p]=='<');
    p++;
    ll res=formula(s,p);
    assert(s[p]=='>');
    p++;
    return (res*res)%MOD;
  }
  if(isdigit(s[p])){
    return num(s,p);
  }
  throw "unexpected";
}



ll formula(string &s,int &p){
  ll res=term(s,p);
  while(p!=s.size() && s[p]!='>'){
    assert(s[p]=='@');
    p++;
    ll rhs=term(s,p);
    res=(rhs>32) ? 0LL : res>>rhs;
  }
  return res;
}

string killSpace(string &s){
  string res="";
  for(int i=0;i<s.size();i++){
    if(s[i]!=' ') res.push_back(s[i]);
  }
  return res;
}

bool isShift(char x0,char x1,char x2){
  return x0=='>' && x1=='>' && x2!='>';
}
string shiftParse(string &s){
  string res="";
  for(int i=0;i<s.size();i++){
    if(i+2>=s.size()){
      res+=s[i];
    }
    else if(isShift(s[i],s[i+1],s[i+2])){
	res+='@';
	i++;
    }
    else{
      res+=s[i];
    }
  }
  return res;
}
int main(){
  string s;
  while(getline(cin,s),s!="#"){
    s=killSpace(s);
    s=shiftParse(s);
    int p=0;
    cout<<formula(s,p)<<endl;
  }
  return 0;
}
