Problem: You are given string s consists of opening and closing brackets of four kinds <>, {}, [], (). There are two types of brackets: opening and closing. You can replace any bracket by another of the same type. For example, you can replace < by the bracket {, but you can't replace it by ) or >.

The following definition of a regular bracket sequence is well-known, so you can be familiar with it.

Let's define a regular bracket sequence (RBS). Empty string is RBS. Let s1 and s2 be a RBS then the strings <s1>s2, {s1}s2, [s1]s2, (s1)s2 are also RBS.

For example the string "[[(){}]<>]" is RBS, but the strings "[)()" and "][()()" are not.

Determine the least number of replaces to make the string s RBS.

Input

The only line contains a non empty string s, consisting of only opening and closing brackets of four kinds. The length of s does not exceed 106.

Output

If it's impossible to get RBS from s print Impossible.

Otherwise print the least number of replaces needed to get RBS from s.

Examples

Input

[&lt;}){}


Output

2

Input

{()}[]


Output

0

Input

]]


Output

Impossible

Solution (in JAVA):

Solution:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;

public class ECR4C {
	static final String L="{[<(";
	static final String R="}]>)";
	public static void main(String[] args) {
		FastScanner in=new FastScanner();
		char[] s=in.nextToken().toCharArray();
		int n=s.length;
		if(n%2==1||R.indexOf(s[0])>-1||L.indexOf(s[n-1])>-1){
			System.out.println("Impossible");
		}else{
			Stack<Character> stack=new Stack<Character>();
			int ans=0;
			for(int i=0;i<n;i++){
				if(stack.isEmpty()){
					stack.push(s[i]);
				}else{
					int l=L.indexOf(stack.peek());
					int r=R.indexOf(s[i]);
					
					if(l>-1&&r>-1){
						stack.pop();
						if(l!=r)
							ans++;
					}else{
						stack.push(s[i]);
					}
				}
			}
			
			if(!stack.isEmpty()){
				System.out.println("Impossible");
			}else{
				System.out.println(ans);
			}
		}
	}
	static class FastScanner{
		BufferedReader br;
		StringTokenizer st;
		public FastScanner(){br=new BufferedReader(new InputStreamReader(System.in));}
		String nextToken(){
			while(st==null||!st.hasMoreElements())
				try{st=new StringTokenizer(br.readLine());}catch(Exception e){}
			return st.nextToken();
		}
		int nextInt(){return Integer.parseInt(nextToken());}
		long nextLong(){return Long.parseLong(nextToken());}
		double nextDouble(){return Double.parseDouble(nextToken());}
	}

}