#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<ll,ll> mp;
ll inf =  1e9;
#define INF 1e9
struct edge{
    int to,cap,rev;
};

vector<vector<edge> > g;
void add_edge(int from,int to,int cap){
    edge f,t;
    f = (edge){ to,cap,(int)g[to].size() };
    g[from].push_back(f);
    t = (edge){ from,0,(int)g[from].size()-1} ;
    g[to].push_back(t);
}

int dfs( int v,int t,int f,vector<bool> &used){
    if( v== t ) return f;
    used[v] = true;
    for(int i=0;i<g[v].size();i++){
	edge &e = g[v][i];
	if(!used[e.to] && e.cap > 0 ){
	    int d = dfs(e.to , t, min(f,e.cap),used);
	    if( d> 0){
		e.cap -=d;
		g[e.to][e.rev].cap += d;
		return d;
	    }
	}
    }
    return 0;
}
int max_flow(int s,int t){
    int flow = 0;
    while(1){
	vector<bool> used(g.size(),false);
	int f = dfs(s,t,INF,used);
	if(f==0) return flow;
	flow += f;
    }
}


int main(){
    int n;
    cin>>n;
    int m = 30,M = 1;
    g = vector<vector<edge> > ( n + 33);
    int S = 0,T =n+32;
    for(int i=1;i<=31;i++) add_edge(S,i,1);
    for(int i=0;i<n;i++) add_edge( 32 + i , T , 1 );
    for(int i=0;i<n;i++){
	int a,b;
	cin>>a>>b;
	//a--,b--;
	m= min(m,a);
	M = max(M,b);
	for(int j=a;j<=b;j++) add_edge( j , 32 + i , 1);
    }
    int f = max_flow(S,T);
    cout<< (M-m+1)*50 + f*50 << endl;

    return 0;
}

