#include <iostream>
#include <vector>
//上面这些全是铺垫……算法请从75行开始看,主函数在110行
using namespace std;
class Line{
public:
int left;//左端点
int right;//右端点
private:
vector<Line*> intersectLines;//与本线断重叠的线段
public:
Line(int x1 , int x2):
left(x1 < x2 ? x1 : x2),
right(x1 < x2 ? x2 : x1){}
//两条线段是否有内部公共点
bool intersect(Line *l){
if(left < l->left && right > l->left){
return true;
}
if(right > l->right && left < l->right){
return true;
}
if(left >= l->left && right <= l->right){
return true;
}
return false;
}
//添加相交线段
void addIntersectLine(Line* l){
intersectLines.push_back(l);
}
intersectLines.push_back(l);
}
//移除相交线段
void removeIntersectLine(Line* l){
for(vector<Line*>::iterator it = intersectLines.begin() ; it != intersectLines.end() ; ++it ){
if(*it == l){
intersectLines.erase(it);
return;
}
}
}
//移除所有相交线段
void clearIntersectLines(){
intersectLines.clear();
}
//相交线段个数
int intersectSize(){
return intersectLines.size();
}
};
//将Line按重叠数从大到小排序,懒得快排了……
void sortLines(Line** lines,int size){
for(int i = 0 ; i < size ; ++i){
for(int j = i + 1 ; j < size ; ++j){
if(lines[i]->intersectSize() < lines[j]->intersectSize()){
Line* temp = lines[i];
lines[i] = lines[j];
lines[j] = temp;
}
}
}
}
//看清楚!!上面全是铺垫,这才是算法!!
int getRemainNum(Line** lines,int size){
if(size <= 1){
int getRemainNum(Line** lines,int size){
if(size <= 1){
return size;
}
//首先计算每条线段与几条线段相交
for(int i = 0 ; i < size ; ++i){
for(int j = i + 1 ; j < size ; ++j){
if(lines[i]->intersect(lines[j])){
lines[i]->addIntersectLine(lines[j]);
lines[j]->addIntersectLine(lines[i]);
}
}
}
sortLines(lines,size);
int res = size;
//如果还有线段相交,就删去(与别的线段交点最多的线段)
while(lines[0]->intersectSize() > 0){
//printLines(lines,size);
lines[0]->clearIntersectLines();
for(int i = 1 ; i < size ; ++i){
lines[i]->removeIntersectLine(lines[0]);
}
--res;
sortLines(lines,size);
}
return res;
}
int main()
{
//输入数据
{
//输入数据
int num , x1 , x2;
scanf("%d",&num);
if(num <= 0 || num > 100){
return 0;
}
Line* lines[num];
for(int i = 0 ; i < num ; ++i){
scanf("%d %d",&x1,&x2);
lines[i] = new Line(x1,x2);
}
int res = getRemainNum(lines , num);
cout << res << endl;
return 0;
}