There are N cities on a 2D plane. The coordinate of the i-th city is (x_i, y_i). Here (x_1, x_2, \dots, x_N) and (y_1, y_2, \dots, y_N) are both permuations of (1, 2, \dots, N).

For each k = 1,2,\dots,N, find the answer to the following question:

Rng is in City k. Rng can perform the following move arbitrarily many times:

* move to another city that has a smaller x-coordinate and a smaller y-coordinate, or a larger x-coordinate and a larger y-coordinate, than the city he is currently in.



How many cities (including City k) are reachable from City k?

Constraints

* 1 \leq N \leq 200,000
* (x_1, x_2, \dots, x_N) is a permutation of (1, 2, \dots, N).
* (y_1, y_2, \dots, y_N) is a permutation of (1, 2, \dots, N).
* All values in input are integers.

Input

Input is given from Standard Input in the following format:


N
x_1 y_1
x_2 y_2
:
x_N y_N


Output

Print N lines. In i-th line print the answer to the question when k = i.

Examples

Input

4
1 4
2 3
3 1
4 2


Output

1
1
2
2


Input

7
6 4
4 3
3 5
7 1
2 7
5 2
1 6


Output

3
3
1
1
2
3
2
#include <bits/stdc++.h>
using namespace std;
//#include <atcoder/all>
//using namespace atcoder;
using ll=long long;
using Graph=vector<vector<int>>;
using pp=pair<ll,pair<ll,ll>>;
#define MAX 1000000
#define MOD 998244353
#define INF 1000000000000000000

int main(){
  int N;
  cin>>N;
  vector<pair<pair<int,int>,int>> xy(N);
  for(int i=0;i<N;i++){
    cin>>xy[i].first.first>>xy[i].first.second;
    xy[i].second=i;
  }
  sort(xy.begin(),xy.end());

  vector<int> m(N),M(N);
  m[0]=xy[0].first.second;
  for(int i=1;i<N;i++){
    m[i]=min(m[i-1],xy[i].first.second);
  }
  M[N-1]=xy[N-1].first.second;
  for(int i=N-2;i>=0;i--){
    M[i]=max(M[i+1],xy[i].first.second);
  }
  vector<int> cnt(N,1);
  for(int i=1;i<N;i++){
    if(m[i-1]<M[i]){
      cnt[i]=cnt[i-1]+1;
    }
  }
  vector<int> ans(N);
  int count=cnt[N-1];
  ans[xy[N-1].second]=count;
  for(int i=N-2;i>=0;i--){
    if(cnt[i+1]==1){
      count=cnt[i];
    }
    ans[xy[i].second]=count;
  }
  for(int i=0;i<N;i++){
    cout<<ans[i]<<endl;
  }
}
