There are You can not change the order of the rectangles.

Find out if there is a way to make the rectangles go in order of non-ascending height. In other words, after all the turns, a height of every rectangle has to be not greater than the height of the previous rectangle (if it is such).

Input

The first line contains a single integer ) — the number of rectangles.

Each of the next i-th rectangle.

Output

Print "YES" (without quotes) if there is a way to make the rectangles go in order of non-ascending height, otherwise print "NO".

You can print each letter in any case (upper or lower).

Examples

Input
3
3 4
4 6
3 5
Output
YES
Input
2
3 4
5 5
Output
NO

Note

In the first test, you can rotate the second and the third rectangles so that the heights will be [4, 4, 3].

In the second test, there is no way the second rectangle will be not higher than the first one

题目意思:按顺序给你n个矩形,这些矩形可以旋转90度,也就是长和宽可以转换,问这一些矩形能不能通过旋转实现按照高度非递增排列。

解题思路:在这道题中,我们对于矩形的高和长没有一个确切的概念,那么就用较长边和较短边来取代,我们需要得到一个按照一边非递增的数序列。我们需要尽可能的扩大数的范围,也就是说尽量用两边中较大的那个作为实现非递增序列的数因子,这样给了下一个矩形更大的发挥空间,如果较大的数超过上一个选择好的,那么只能选择较小的数了,如果较小的也超过了,说明不能实现。

 

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <string>
 6 #define ll long long int
 7 using namespace std;
 8 struct rec
 9 {
10     ll w;
11     ll h;
12     ll maxs;///较长边
13     ll mins;///较短边
14 } a[100010];
15 int main()
16 {
17     int n,i,flag;
18     ll x;
19     scanf("%d",&n);
20     for(i=0; i<n; i++)///给矩形的两条边分类
21     {
22         scanf("%lld%lld",&a[i].w,&a[i].h);
23         if(a[i].w>=a[i].h)
24         {
25             a[i].maxs=a[i].w;
26             a[i].mins=a[i].h;
27         }
28         else
29         {
30             a[i].maxs=a[i].h;
31             a[i].mins=a[i].w;
32         }
33     }
34     flag=1;
35     x=a[0].maxs;
36     for(i=1; i<n; i++)
37     {
38        if(a[i].maxs<=x)///更新较长边
39        {
40            x=a[i].maxs;
41        }
42        else if(a[i].maxs>x&&a[i].mins<=x)///使用较小边
43        {
44            x=a[i].mins;
45        }
46        else if(a[i].mins>x)///不符合要求
47        {
48            flag=0;
49            break;
50        }
51     }
52     if(flag)
53     {
54         printf("YES\n");
55     }
56     else
57     {
58         printf("NO\n");
59     }
60     return 0;
61 }

 

相关文章: