import java.io.*; // 입력을 받기 위해 이 라이브러리가 필요하다.
import java.util.*;
public class BigInteger
{
private String data;
private char[] input1;
private char[] input2;
private int sign1=0, sign2=0, operand=0; // +는 0, -는 1, *는 2(operand만)
private int ressign = 0; // 최종 결과의 부호, +는 0, -는 1
BigInteger(String input){
data = input;
}
private void parse(){
// 문자열 처리에 관련된 모든 일을 담당하는 method
StringTokenizer stk = new StringTokenizer(data, "+-* ");
input1 = (stk.nextToken()).toCharArray(); // 숫자 1
input2 = (stk.nextToken()).toCharArray(); // 숫자 2
String noBlank = data.replace(" ", ""); // 공백을 모두 없앰
char[] tmp = noBlank.toCharArray();
if(tmp[0]=='-') sign1 = 1;
else sign1=0;
for(int i=1; i<tmp.length; i++){
if(tmp[i]>='0' && tmp[i]<='9' ) continue;
if(tmp[i]=='+'){
operand = 0;
}
else if(tmp[i]=='-'){
operand = 1;
}
else if(tmp[i]=='*'){
operand = 2;
}
if(tmp[i+1]=='-'){
sign2 = 1;
break;
}
else{
sign2 = 0;
break;
}
}
}
private void calculate()
{
char[] result={0};
if(operand==0){
if(sign1==0 && sign2 ==1){
result = sub(input1, input2);
}
else if(sign1==1 && sign2==1){
ressign = 1;
result = add(input1, input2);
}
else if(sign1==1 && sign2==0){
result = sub(input2, input1);
}
else result = add(input1, input2);
}
else if(operand==1){
if(sign1==0 && sign2 ==0){
result = sub(input1, input2);
}
else if(sign1==1 && sign2==0){
ressign = 1;
result = add(input1, input2);
}
else if(sign1==0 && sign2 ==1){
result = add(input1, input2);
}
else result = sub(input2, input1);
}
else if(operand==2){
if((sign1==0 && sign2==1) || (sign1==1 && sign2==0)){
ressign = 1;
}
result = mult(input1, input2);
}
if(ressign==1 && result[0]!='0') System.out.print('-');
System.out.println(result);
}
private char[] reverse(char[] input){
char[] res = new char[input.length];
for(int i=input.length-1; i>=0; --i){
res[input.length-1-i] = input[i];
}
return res;
}
private char[] add(char[] in1, char[] in2){
if(in1.length<in2.length){
return add(in2, in1);
}
char[] res=new char[202];
for(int i=0; i<200; i++) res[i]='0';
char[] rev1 = reverse(in1);
char[] rev2 = reverse(in2);
for(int i=0; i<rev2.length; i++){
res[i] = (char) (res[i]+rev1[i]+rev2[i]-'0'-'0');
if(res[i]>'9'){
res[i+1]+= 1;
res[i]-=10;
}
}
for(int i=rev2.length; i<rev1.length; i++){
res[i] = (char) (res[i]+rev1[i]-'0');
if(res[i]>'9'){
res[i+1]+= 1;
res[i]-=10;
}
}
if(res[in1.length]==1) res[in1.length] = '1';
for(int i=200; i>=1; i--){
if(((res[i]=='\0') || (res[i]=='0')) && ((res[i+1]=='\0') || (res[i+1]=='0'))) res[i]='\0';
else break;
}
String str = new String(reverse(res));
str = str.replace("\0", "");
return str.toCharArray();
}
private char[] sub(char[] in1, char[] in2){
if(in1.length<in2.length){
if(ressign==1) ressign = 0;
else ressign = 1;
return sub(in2, in1);
}
int carry=0;
char[] res = new char[101];
char[] rev1 = reverse(in1);
char[] rev2 = reverse(in2);
for(int i=0; i<rev2.length; i++){
res[i] = (char) (carry+rev1[i]-rev2[i]+'0');
if(res[i]<'0'){
carry= -1;
res[i]+=10;
}
else carry=0;
}
for(int i=rev2.length; i<rev1.length; i++){
res[i] = (char) (carry+rev1[i]);
if(res[i]<'0'){
carry = -1;
res[i]+=10;
}
else carry=0;
}
for(int i=rev1.length-1; i>=1; i--){
if(res[i]=='0') res[i]='\0';
else break;
}
String str = new String(reverse(res));
str = str.replace("\0", "");
if(carry==-1){
char[] before = str.toCharArray();
char[] onemore = new char[before.length+1];
onemore[0]='1';
for(int i=1; i<onemore.length; i++){
onemore[i]='0';
}
if(ressign==1) ressign=0;
else ressign=1;
return sub(onemore, before);
}
return str.toCharArray();
}
private char[] mult(char[] in1, char[] in2){
if(in1.length<in2.length){
return mult(in2, in1);
}
int psum;
int carry;
char[] res = new char[200];
for(int i=0; i<200; i++) res[i]='0';
char[] rev1 = reverse(in1);
char[] rev2 = reverse(in2);
for(int i=0; i<rev2.length; i++){
char[] tmp2 = new char[200];
for(int k=0; k<200; k++) tmp2[k]='0';
for(int j=0; j<rev1.length; j++){
psum = (rev1[j]-'0')*(rev2[i]-'0');
carry = psum/10;
tmp2[i+j]+=(psum%10);
if(tmp2[i+j]>'9'){
tmp2[i+j]-=10;
carry++;
}
tmp2[i+j+1]+=carry;
}
res = add(res, reverse(tmp2));
}
String str = new String(res);
str = str.replace("\0", "");
return str.toCharArray();
}
public static void main(String args[])
{
// 입력을 받기 위한 작업이다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// quit가 나올 때 까지 입력을 받아야 하므로
// while(true) 문을 사용하여 계속 반복한다.
while (true)
{
try // try 와 catch 문은 오류 발생을 감지한다.
{
String input = br.readLine(); // 한 줄을 입력 받아 input 문자열에 저장
if (input.compareTo("quit") == 0)
{
// quit 라고 입력받았을 경우 종료한다.
// 종료하려면 while 문을 빠져나와야 하므로 break를 사용한다.
break;
}
// quit가 아니라면 식을 계산해야 한다.
BigInteger BI = new BigInteger(input);
BI.parse();
BI.calculate();
}
catch (Exception e)
{
// 만약 try { } 안에서 오류가 발생했다면 이곳으로 오게 된다.
// 이렇게 함으로써 입력을 이상하게 했을 경우 발생하는 오류를 방지한다.
System.out.println("입력이 잘못되었습니다. 오류 : " + e.toString());
}
}
}
}