You are given string *s* consists of opening and closing brackets of four kinds &lt;&gt;, {}, [], (). 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 &lt; by the bracket {, but you can't replace it by ) or &gt;.

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 *s*<sub class="lower-index">1</sub> and *s*<sub class="lower-index">2</sub> be a RBS then the strings &lt;*s*<sub class="lower-index">1</sub>&gt;*s*<sub class="lower-index">2</sub>, {*s*<sub class="lower-index">1</sub>}*s*<sub class="lower-index">2</sub>, [*s*<sub class="lower-index">1</sub>]*s*<sub class="lower-index">2</sub>, (*s*<sub class="lower-index">1</sub>)*s*<sub class="lower-index">2</sub> are also RBS.

For example the string "[[(){}]&lt;&gt;]" is RBS, but the strings "[)()" and "][()()" are not.

Determine the least number of replaces to make the string *s* RBS.
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 10<sup class="upper-index">6</sup>.
none
[<}){}
2
{()}[]
0
]]
Impossible
>
Impossible
{}
0
{}
0
{]
1
{]
1
{]
1
[]{[]({)([
Impossible
(([{>}{[{[)]]>>]
7
((<>)[]<]><]
3
[[([[(>]>)))[<)>
6
({)[}<)](}
5
(}{)[<][)(]}
6
>}({>]{[}<{<{{)[]]{)]>]]]<(][{)<<<{<<)>)()[>{<]]{}<>}}}}(>}<})(][>{((<{<)]}>)))][>[}[])<]){]]][<[)([
Impossible
<<[<{{<([({<<[)<>(]]){})>[](])[)))[[}>]<)>[[>{>>>[<]}<>>)[>]<{)<[><(<]][>(>]>][(<][{]}(()<[()[>><<])<]})]<]}{)
45
[<<{{((}[}<<)<)>})(][{>}})((>)<[)[>}[})[)>()[()[((}<<(>)<>](<>(}[>})[[[{)<}<<(}{>>}[<([[])<><)]<{>}[>>>{({>)}]})>)
42
(<[([(<({>(}{]>[(})])}])()<<}{]{[>]>(>>[(>>}[){(}<[{(()]{{<(<{][[{<><{<{)<>>]}}}{)(}{})}[<))>>}((({>){({}{{]}]>>}})>))
43
{(]}<([]<]{>]<{<({{{<>))}[({(}{)[}({>]}}<<)}<]))(<>(>{>{{{)<}({<]<>{)(>[)>{({}<([<[[)]><>{]}}(>]{}<)[})]}]]}]}>}
40
<(([)]<[}>{)>][[(<()({{{>>((]<}<{{<>}><<[)}[[)([[)[)}<]<{(<>){([)><{[([[][({])})<][(}]}>>[){)[({>){(}[}})>}>]>)]}))})>}]
45
)(
Impossible
[[[[[[[[
Impossible
#include <bits/stdc++.h>
using namespace std;
#define  ll long long 
#define  range(v) ((v).begin()),((v).end())
#define Fast ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define frac(n) fixed<<setprecision(n)
#define close(n) return cout<<n,0;
vector<int> ar[5]{};
string s;//1 2 3 4 
void f(int x ,char c,int i,char l ,char r) {
	if (c == l)
		ar[x].push_back(i);
	else if (c == r) {
		if (ar[x].size() and s[ar[x].back()] == l)
			ar[x].pop_back();
		else ar[x].push_back(i);
	}
}
int main() {
	Fast;
	cin >> s;//( [ < { 
	for (int i = 0; i < s.size();i++) {
		char c = s[i];
		if (c == '(' or c == ')')
			f(0, c, i, '(', ')');
		else if (c == '[' or c == ']')
			f(1, c, i, '[', ']');
		else if (c == '<' or c == '>')
			f(2, c, i, '<', '>');
		else if (c == '{' or c == '}')
			f(3, c, i, '{', '}');
	}
	vector<int>l, r;
	for (int i = 0; i < 4; i++) {
		for (auto j : ar[i]) {
			if (s[j] == '(' or s[j] == '<' or s[j] == '{' or s[j] == '[')l.push_back(j);
			else r.push_back(j);
		}
	}
	sort(range(l));
	sort(range(r));
	if (l.size() != r.size())close("Impossible");
	int x = 1;
	for (int i = 0; i < l.size(); i++) {
		if (l[i] > r[i])close("Impossible");
	}
	cout << l.size();
}