import java.util.Scanner;
import java.util.Stack;

public class Lisp {
	
	// Evaluate entire well-formed Lisp expression
	public double evaluateLispExpr(String input) {
		Stack<String> tokens = new Stack<String>(); // outer stack
		Scanner sc = new Scanner(input);
		while (sc.hasNext()){
			String currentToken = sc.next();
			if (currentToken.equals(")")){ 
				Stack<String> expr = new Stack<String>(); // inner
				while (!tokens.peek().equals("("))
					expr.push(tokens.pop());
				tokens.pop(); // remove "("
				tokens.push("" + performOperation(expr));
			} else {
				tokens.push(currentToken); 
			}
		}
		return Double.parseDouble(tokens.peek());
	}
	
	// Evaluate simple expression of form: operator operand1 operand2...
	private double performOperation(Stack<String> s){
		double result = 0;
		char operator = s.pop().charAt(0); // pop() here returns String
		switch (operator){
			case '+':
				result = 0;
				while (!s.empty())
					result = result + Double.parseDouble(s.pop());
				return result;
			case '-':
				if (s.size() == 1)
					return 0 - Double.parseDouble(s.pop());
				result = Double.parseDouble(s.pop());
				while (!s.empty())
					result = result - Double.parseDouble(s.pop());
				return result;
			case '*':
				result = 1;
				while(!s.empty())
					result = result * Double.parseDouble(s.pop());
				return result;
			case '/':
				if (s.size() == 1)
					return 1 / Double.parseDouble(s.pop());
				result = Double.parseDouble(s.pop());
				while (!s.empty())
					result = result / Double.parseDouble(s.pop());
				return result;
		} // switch-case: don't forget to "break;" otherwise
		return result; // should not happen =X
	}
	
	public static void main(String[] args) {
		Lisp program = new Lisp();
		Scanner sc = new Scanner(System.in);
		System.out.println(program.evaluateLispExpr(sc.nextLine()));
		sc.close();
	}

}
