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.util.Scanner;
public class Contest5probA{
  public static void main(String[]args){
  
  Scanner sc=new Scanner(System.in);
  
  String s=sc.nextLine();
 // System.out.println(s);
    char a[]=s.toCharArray();
  
    char b[]=new char[a.length];
  
   int j=0;
   int c=0;
   int cnt=0;
 
   while(j<a.length){
     if((a[j]!=']')&&(a[j]!=')')&&(a[j]!='}')&&(a[j]!='>')){
       
       if(c<0){
         c=0;
       }
            b[c]=a[j];
            c++;
        // System.out.println(c+" "+b[c]);
          
      }
      else{
       if(a[j]==']'){
         if(c>0){
        if((b[c-1]=='<')||(b[c-1]=='(')||(b[c-1]=='{')){
         cnt++;
    //    System.out.println("a[j] "+a[j]+" c "+c+" b[c-1] "+b[c-1]+"cnt"+cnt);
        
        }
        
        }
          c--;
       }
        else{
         if(a[j]=='}'){
           if(c>0){
          if((b[(c-1)]=='<')||(b[(c-1)]=='(')||(b[(c-1)]=='[')){
           
               cnt++;
               //   System.out.println("a[j] "+a[j]+" c "+c+" b[c-1] "+b[c-1]+"cnt"+cnt);
            
                  }
                  
         }
             c--;
         }
         else{
         if(a[j]=='>'){
           if(c>0){
          if((b[c-1]=='[')||(b[c-1]=='(')||(b[c-1]=='{')){
               cnt++;
              
              //  System.out.println("a[j] "+a[j]+" c "+c+" b[c-1] "+b[c-1]+"cnt"+cnt);
                  }
                   
         }
            c--;
         }
         else{
           if(a[j]==')'){
             if(c>0){
          if((b[c-1]=='[')||(b[c-1]=='<')||(b[c-1]=='{')){
               cnt++;
                
                  }
                   
             }
              c--;
         }
         }
         }
        }
       
       }
     j++;
     }
    if(c==0){
      System.out.println(cnt);
    }
    else{
    System.out.println("Impossible");
    }
    
 
  
  }
}