#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1000001;
vector<pair<int,int>> seg[8*MAXN];
vector<pair<int,int>> dsu(MAXN);
pair<int,int> dsucalc(int a) {
int c = a,sb = 0;
while(dsu[c].first != c) {
sb+=dsu[c].second;
c = dsu[c].first;
}
int x = sb,e = a;
while(e != dsu[e].first) {
pair<int,int> d = dsu[e];
dsu[e] = {c,abs(x)%2};
x-=d.second;
e = d.first;
}
sb%=2;
return {c,sb};
}
void upd(int l, int r, int x, int ql, int qr, int c) {
if(ql > r || qr < l) {
return;
}
if(l >= ql && r <= qr) {
seg[x].push_back({c,0});
return;
}
int mid = (l+r)/2;
upd(l,mid,x*2,ql,qr,c);
upd(mid+1,r,x*2+1,ql,qr,c);
}
void calc(int l, int r, int x, int p, int c) {
bool yeah0 = false,yeah1 = false;
for(pair<int,int> v: seg[x]) {
pair<int,int> x = dsucalc(v.first);
x = {x.first,x.second+v.second};
if(x.first != c) {
if(x.second%2) {
yeah1 = true;
}
else {
yeah0 = true;
}
dsu[x.first] = {c,(x.second+1)%2};
}
}
seg[x].clear();
if(yeah0) {
seg[x].push_back({c,1});
}
if(yeah1) {
seg[x].push_back({c,0});
}
if(l == r) {
return;
}
int mid = (l+r)/2;
if(p <= mid) {
calc(l,mid,x*2,p,c);
}
else {
calc(mid+1,r,x*2+1,p,c);
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin >> n;
for(int i = 1; i <= n; i++) {
dsu[i] = {i,0};
}
vector<int> pos(n+1);
vector<int> r(2*n+1);
for(int i = 1; i <= n; i++) {
int a,b;
cin >> a >> b;
pos[i] = a;
r[b] = i;
}
for(int i = 1; i <= 2*n; i++) {
if(r[i] != 0) {
int v = r[i];
calc(1,2*n,1,pos[v],v);
upd(1,2*n,1,pos[v],i,v);
}
}
int br = 0;
for(int i = 1; i <= n; i++) {
if(dsu[i].first == i) {
br++;
}
}
vector<int> col(n+1);
stack<int> idk1;
stack<int> idk2;
for(int i = 1; i <= n; i++) {
r[pos[i]] = -i;
}
for(int i = 1; i <= 2*n; i++) {
int v = abs(r[i]);
if(r[i] < 0) {
if(col[v]) {
idk1.push(v);
}
else {
idk2.push(v);
}
}
else {
if(col[v]) {
if(idk1.top() != v) {
cout << 0;
return 0;
}
idk1.pop();
}
else {
if(idk2.top() != v) {
cout << 0;
return 0;
}
idk2.pop();
}
}
}
int ans = 1;
for(int i = 0; i < br; i++) {
ans+=ans;
ans%=1000000007;
}
cout << ans;
return 0;
}