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).
Example
4
>= 1 Y
< 3 N
<= -3 N
> 55 N
17
2
> 100 Y
< -100 Y
Impossible
根据输入的数据不断更新区间的左右端点,注意更新是有效的!!!
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<string> 5 using namespace std; 6 7 typedef long long ll; 8 static const int INF=2e9+5; 9 10 int main() 11 { int n; 12 while(~scanf("%d",&n)){ 13 string s,s1,a,b,c,d,e; 14 a=">=",b=">",c="<=",d="<",e="Y"; 15 ll x,l=-INF,r=INF; 16 for(int i=1;i<=n;i++){ 17 cin>>s>>x>>s1; 18 if(s==a){ 19 if(s1==e) l=max(l,x); 20 else r=min(r,x-1); 21 } 22 if(s==b){ 23 if(s1==e) l=max(l,x+1); 24 else r=min(r,x); 25 } 26 if(s==c){ 27 if(s1==e) r=min(r,x); 28 else l=max(l,x+1); 29 } 30 if(s==d){ 31 if(s1==e) r=min(r,x-1); 32 else l=max(l,x); 33 } 34 } 35 if(l>r) printf("Impossible\n"); 36 else{ 37 if((l+r)%2==0) printf("%lld\n",(l+r)/2); 38 else printf("%lld\n",(l+r+1)/2); 39 } 40 } 41 }