#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <climits>
struct posi_loca{
int left,right,priority;
posi_loca *leftptr,*rightptr;
};
class express{
private:
char *origstr,*strconver;
posi_loca *discrete,*expre_tree;
int discr_length;
public:
express();
posi_loca low_priority(int left,int right);
void maketree(posi_loca **treeptr,int left,int right);
double operato(double num1,char op,double num2);
double calculation(posi_loca* treeptr);
void killtree(posi_loca *treeptr);
~express();
};
double express::operato(double num1,char op,double num2){
switch(op){
case '+':return num1+num2;
case '-':return num1-num2;
case '*':return num1*num2;
case '/':return num1/num2;
}
return 0;
}
posi_loca express::low_priority(int left,int right){
int min=INT_MAX;
posi_loca distemp_op,distemp_num;
distemp_op.priority=0;
for(int i=1;discrete[i].right<=right;i++){
if(discrete[i].left>=left){
if(discrete[i].priority&&min>=discrete[i].priority){
min=discrete[i].priority;
distemp_op=discrete[i];
}
else if(!discrete[i].priority)
distemp_num=discrete[i];
}
}
if(distemp_op.priority)
return distemp_op;
else
return distemp_num;
}
void express::maketree(posi_loca **treeptr,int left,int right){
*treeptr=(posi_loca*)malloc(sizeof(posi_loca));
posi_loca lower_priority=low_priority(left,right);
**treeptr=lower_priority;
if(lower_priority.priority){
maketree(&((*treeptr)->leftptr),left,lower_priority.left-1);
maketree(&((*treeptr)->rightptr),lower_priority.left+1,right);
}
else{
(*treeptr)->leftptr=NULL;(*treeptr)->rightptr=NULL;
(*treeptr)->priority=0;
}
}
double express::calculation(posi_loca* treeptr){
if(treeptr->priority){
return operato(calculation(treeptr->leftptr),origstr[treeptr->left],calculation(treeptr->rightptr));
}
int j=0;
for(int i=treeptr->left;i<=treeptr->right;i++)
strconver[j++]=origstr[i];
strconver[j]='\0';
return atof(strconver);
}
express::express(){
origstr=(char*)malloc(1010);
strconver=(char*)malloc(1010);
discrete=(posi_loca*)malloc(sizeof(posi_loca)*1010);
int pare_num=0;
scanf("%s",origstr+1);
discr_length=0;
for(int i=1,j=1;j<(int)strlen(origstr+1);){
switch(origstr[j]){
case '+':
case '-':
discrete[++discr_length].left=i;
discrete[discr_length].right=j;
discrete[discr_length].priority=1+2*pare_num;
i++;j++;break;
case '*':
case '/':
discrete[++discr_length].left=i;
discrete[discr_length].right=j;
discrete[discr_length].priority=2+2*pare_num;
i++;j++;break;
case '(':
pare_num++;i++;j++;break;
case ')':
pare_num--;i++;j++;break;
default:
while((origstr[j]>='0'&&origstr[j]<='9')||origstr[j]=='.')
j++;
discrete[++discr_length].left=i;
discrete[discr_length].right=j-1;
discrete[discr_length].priority=0;
i=j;
}
}
maketree(&expre_tree,1,strlen(origstr+1)-1);
printf("%.2f\n",calculation(expre_tree));
}
void express::killtree(posi_loca *treeptr){
if(treeptr->leftptr==NULL){
free(treeptr);
return ;}
killtree(treeptr->leftptr);
killtree(treeptr->rightptr);
free(treeptr);
}
express::~express(){
free(origstr);
free(strconver);
free(discrete);
killtree(expre_tree);
}
int main(){
int n;
scanf("%d",&n);
while(n--){
express *p1=new express;
delete p1;
}
return 0;
}