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 CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
long long mod = 1e9 + 7;
inline long long int sqr(long long int x) { return x * x; }
map<char, long long int> M, Mn;
stack<long long int> S;
long long int A[300003], C[300003], dp[103];
long long int one, zero, ansR, numNodes;
int main() {
  long long int T, i, j, h, l, r, k, s, a, b, c, d, n, m, w, x, y, v, z, t, p,
      q, curr, prev, sum, ans, pos, val, countA, secondMin, indicator;
  string P;
  cin >> P;
  n = P.size();
  M['<'] = 1;
  M['{'] = 2;
  M['['] = 3;
  M['('] = 4;
  M['>'] = -1;
  M['}'] = -2;
  M[']'] = -3;
  M[')'] = -4;
  countA = 0;
  for (long long int i = (0); i <= (n - 1); ++i) {
    t = M[P[i]];
    if (S.size() == 0) {
      if (t < 0) {
        printf("Impossible\n");
        return 0;
      } else
        S.push(t);
    } else if (t > 0)
      S.push(t);
    else {
      k = S.top();
      if (k + t != 0) countA++;
      S.pop();
    }
  }
  if (S.size() != 0)
    printf("Impossible\n");
  else
    printf("%lld\n", countA);
  return 0;
}