Problem: A TV show called "Guess a number!" is gathering popularity. The whole Berland, the old and the young, are watching the show.

The rules are simple. The host thinks of an integer y and the participants guess it by asking questions to the host. There are four types of acceptable questions:

  * Is it true that y is strictly larger than number x? 
  * Is it true that y is strictly smaller than number x? 
  * Is it true that y is larger than or equal to number x? 
  * Is it true that y is smaller than or equal to number x? 



On each question the host answers truthfully, "yes" or "no".

Given the sequence of questions and answers, find any integer value of y that meets the criteria of all answers. If there isn't such value, print "Impossible".

Input

The first line of the input contains a single integer n (1 ≤ n ≤ 10000) — the number of questions (and answers). Next n lines each contain one question and one answer to it. The format of each line is like that: "sign x answer", where the sign is:

  * ">" (for the first type queries), 
  * "<" (for the second type queries), 
  * ">=" (for the third type queries), 
  * "<=" (for the fourth type queries). 



All values of x are integer and meet the inequation  - 109 ≤ x ≤ 109. The answer is an English letter "Y" (for "yes") or "N" (for "no").

Consequtive elements in lines are separated by a single space.

Output

Print any of such integers y, that the answers to all the queries are correct. The printed number y must meet the inequation  - 2·109 ≤ y ≤ 2·109. If there are many answers, print any of them. If such value doesn't exist, print word "Impossible" (without the quotes).

Examples

Input

4
&gt;= 1 Y
&lt; 3 N
&lt;= -3 N
&gt; 55 N


Output

17


Input

2
&gt; 100 Y
&lt; -100 Y


Output

Impossible

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
string to_small(string x) {
  for (long long i = 0; i < x.size(); i++) {
    if (x[i] >= 65 && x[i] <= 90) x[i] = x[i] - 'A' + 'a';
  }
  return x;
}
string to_capital(string x) {
  for (long long i = 0; i < x.size(); i++) {
    if (x[i] >= 97 && x[i] <= 122) x[i] = x[i] - 'a' + 'A';
  }
  return x;
}
long long fact(long long n) {
  long long f = 1;
  for (long long i = 1; i <= n; i++) f *= i;
  return f;
}
bool is_prime(long long n) {
  bool flag = true;
  if (n == 1)
    flag = false;
  else {
    long long c = 0;
    for (long long i = 2; i <= sqrt(n); i++) {
      if (n % i == 0) {
        c++;
        break;
      }
    }
    (c > 0) ? flag = false : flag = true;
    c = 0;
  }
  return flag;
}
long long gcd(long long x, long long y) {
  while (y != 0) {
    long long temp = y;
    y = x % y;
    x = temp;
  }
  if (x < 0) x *= -1;
  return x;
}
long long lcm(long long x, long long y) {
  long long a = x;
  long long b = y;
  while (y != 0) {
    long long temp = y;
    y = x % y;
    x = temp;
  }
  if (x < 0) x *= -1;
  a = a * b;
  if (a < 0) a *= -1;
  return (a / x);
}
long long arr[100000], n, s;
vector<long long> v;
long long f(long long mid) {
  for (long long j = 0; j < n; j++) {
    long long a = arr[j] + ((j + 1) * mid);
    v.push_back(a);
  }
  sort(v.begin(), v.end());
  long long co = 0;
  for (long long i = 0; i < mid; i++) co += v[i];
  v.clear();
  return co;
}
const long long mod = 1e9 + 7;
long long power(long long base, long long ex) {
  long long ans = 1;
  base %= mod;
  while (ex > 0) {
    if (ex & 1) ans = (ans * base) % mod;
    ex >>= 1;
    base = (base * base) % mod;
  }
  return ans;
}
int main() {
  std::ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  ;
  int t;
  cin >> t;
  long long mx = -2000000000;
  long long mn = 2000000000;
  for (int i = 0; i < t; i++) {
    string s;
    long long x;
    char ch;
    cin >> s >> x >> ch;
    if (ch == 'N') {
      if (s == ">") {
        s = "";
        s = "<=";
      } else if (s == ">=") {
        s = "";
        s = "<";
      } else if (s == "<") {
        s = "";
        s = ">=";
      } else if (s == "<=") {
        s = "";
        s = ">";
      }
    }
    if (s == ">") {
      mx = max(x + 1, mx);
    } else if (s == ">=") {
      mx = max(x, mx);
    } else if (s == "<") {
      mn = min(mn, x - 1);
    } else if (s == "<=") {
      mn = min(mn, x);
    }
  }
  if (mx > mn)
    cout << "Impossible" << endl;
  else
    cout << mx << endl;
  return 0;
}