package main

import (
	"strconv"
)

func evalRPN(tokens []string) int {
	length := len(tokens)
	if length == 0 {
		return 0
	}
	vals := make([]int, 0)
	for i := 0; i < length; i++ {
		switch tokens[i] {
		case "+":
			size := len(vals)
			a, b := vals[size-2], vals[size-1]
			vals = vals[:size-2]
			vals = append(vals, a+b)
		case "-":
			size := len(vals)
			a, b := vals[size-2], vals[size-1]
			vals = vals[:size-2]
			vals = append(vals, a-b)
		case "*":
			size := len(vals)
			a, b := vals[size-2], vals[size-1]
			vals = vals[:size-2]
			vals = append(vals, a*b)
		case "/":
			size := len(vals)
			a, b := vals[size-2], vals[size-1]
			vals = vals[:size-2]
			vals = append(vals, a/b)
		default:
			val, _ := strconv.Atoi(tokens[i])
			vals = append(vals, val)
		}
	}
	return vals[0]
}

// func main() {
// 	println(evalRPN([]string{ // The answer: 22
// 		"10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"}))
// }