#include <stdio.h>
#include <assert.h>
#include <stack>

char buf[128];
int pos;
#define NOW (buf[pos])

bool isdigit(char c) {
	return ('0' <= c && c <= '9');
}

bool isstrong(char c) {
	return (c=='*'||c=='/');
}
bool isweak(char c) {
	return (c=='+'||c=='-');
}

int digit() {
	if ( !isdigit(NOW) ) {
		fprintf(stderr, "%c: ", NOW);
		assert( isdigit(NOW) );
	}
	int ret = NOW - '0';
	pos++;
	
	return ret;
}
int number() {
	int ret = digit();
	while( isdigit(NOW) ) {
		ret = ret*10 + digit();
	}
	return ret;
}

int main(void) {

	int set;
	scanf("%d", &set);
	
	while(set--) {
		scanf("%s", buf);
		pos = 0;
		
		std::stack<char> expr;
		std::stack<int>  num;
		
		expr.push('(');
		
		while(true) {
			if(isdigit(NOW)) {
				num.push( number() );
			} else {
				if ( expr.top() == '(' && (NOW==')'||NOW=='=') ) {
					//対応する括弧が出てきたので、スタック上の括弧を消す
					expr.pop();
					pos++;
					if ( expr.empty() ) {
						break;
					}
				} else if ( expr.top() == '(' ||
				     NOW == '(' ||
					 ( isstrong(NOW)&&isweak(expr.top()) ) ) {
					//強い演算子はスタックに積んでおく。括弧が積んであるなら、無条件に積む
					expr.push(NOW);
					pos++;
				} else {
					//次の演算子は弱いor同じだから、積んでるものを先に計算してしまおう
					char de = expr.top(); expr.pop();

					int b = num.top(); num.pop();
					int a = num.top(); num.pop();
					int ans;
					switch(de) {
						case '+': ans=a+b; break;
						case '-': ans=a-b; break;
						case '*': ans=a*b; break;
						case '/': ans=a/b; break;
					}
					num.push(ans);
				}
			}
			
		}
		
		printf("%d\n", num.top());
	}
	
}