public class Converter3
    //Uses StringBuffer
//BadToken extends Exception
//converts an infix expression to a postfix expression
{
	public static boolean isOperator(char ch)
	{
		return ch == '+'||ch == '-'||ch=='*'||ch=='/';
	}
	
	public static boolean isOperand(char ch)
	{
		return ch >= '0' && ch <='9';
	}
	
	public static boolean precedence(Object top, char token)
	//determines when to pop a token from stack
	{
		boolean ans = false;
		Character stop = (Character)  top;
		char stackTop = stop.charValue();
		switch(stackTop)
		{
			case '+' : ans = token == '+' || token == '-'; break;
			case '-' : ans = token == '+' || token == '-'; break;
			case '*' : ans = true; break;
			case '/' : ans = true; break;
		}
		return ans;
	}
			
	public static void main(String[] asd) throws BadToken
	{
		String s = "3+&4*5";
		int len = s.length();
                StringBuffer postfix =new  StringBuffer();
		char token;
		StackAdt stack = new StackAdt(len);
		for(int j = 0; j < len; j++)
		{
			token = s.charAt(j);
			if(isOperand(token) )
			{
			    postfix.append(token);
			}
			else if(isOperator(token) )
			{
				while(!stack.isEmpty()&&precedence(stack.peek(), token) )
				{
				    postfix.append("" + stack.pop() );
				    //since pop() produces an Object
				}
				stack.push(new Character(token) );
			}
			else
			{
				throw new BadToken("" + token);
			}
		}
		while(!stack.isEmpty() )
		{
		    postfix.append("" + stack.pop() ); 

		}
		System.out.println( postfix);
	}		
}

class BadToken extends Exception
{
	public BadToken()
	{
		super();
	}
	
	public BadToken(String s)
	{
		super(s);
	}
}
	
			
			
		
	

