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
!function(e){function __webpack_require__(n){if(r[n])return r[n].exports;var t=r[n]={exports:{},id:n,loaded:!1};return e[n].call(t.exports,t,t.exports,__webpack_require__),t.loaded=!0,t.exports}var r={};return __webpack_require__.m=e,__webpack_require__.c=r,__webpack_require__.p="",__webpack_require__(0)}([function(e,r,n){e.exports=n(1)},function(e,r){"use strict";function solve(e){function brType(e){return Math.floor("<>{}[]()".indexOf(e)/2)}function brOpen(e){return 0==="<>{}[]()".indexOf(e)%2}function calculate(e){for(var r=[],n=0,t=0;t<e.length;t++){var _=e.substring(t,t+1);if(brOpen(_))r.push(_);else{if(0===r.length)return-1;var u=r.pop();brType(_)!==brType(u)&&++n}}return 0===r.length?n:-1}function resout(e){print(-1===e?"Impossible":e)}var r=calculate(e);resout(r)}var n=readline();solve(n)}]);