#include<bits/stdc++.h>
using namespace std;
#define li long long
#define gc getchar()
#define pc putchar
li read(){
	li x = 0;
	int y = 0,c = gc;
	while(!isdigit(c)){
		y = c;
		c = gc;
	}
	while(isdigit(c)){
		x = (x << 1) + (x << 3) + (c ^ '0');
		c = gc;
	}
	return y == '-' ? -x : x;
}
void print(li q){
	if(q < 0){
		pc('-');
		q = -q;
	}
	if(q >= 10) print(q / 10);
	pc(q % 10 + '0');
}
int n;
struct node{
	int l,r,id;
}a[100010],b[100010];
bool c1(node q,node w){
	return q.l > w.l;
}
bool c2(node q,node w){
	return q.r < w.r;
}
bool vst[100010];
int main(){
	li as = 0,as2 = 0;
	int i = 0,j = 0;
	n = read();
	for(i = 1;i <= n;++i){
		a[i].l = read();
		a[i].r = read();
		a[i].id = i;
		b[i] = a[i];
	}
	sort(a + 1,a + n + 1,c1);
	sort(b + 1,b + n + 1,c2);
	int nw = 0;
	i = j = 0;
	while(i < n && j < n){
		++i;
		while(vst[a[i].id] && i <= n) ++i;
		if(i > n) break;
		vst[a[i].id] = 1;
		if(a[i].l > nw || a[i].r < nw){
			if(abs(nw - a[i].l) < abs(nw - a[i].r)){
				as += abs(nw - a[i].l);
				nw = a[i].l;
			}
			else{
				as += abs(nw - a[i].r);
				nw = a[i].r;
			}
			//cout<<nw<<endl;
		}
		++j;
		while(vst[b[j].id] && j <= n) ++j;
		if(j > n) break;
		vst[b[j].id] = 1;
		if(b[j].l > nw || b[j].r < nw){
			if(abs(nw - b[j].l) < abs(nw - b[j].r)){
				as += abs(nw - b[j].l);
				nw = b[j].l;
			}
			else{
				as += abs(nw - b[j].r);
				nw = b[j].r;
			}
			//cout<<nw<<endl;
		}
	}
	while(i < n){
		++i;
		while(vst[a[i].id] && i <= n) ++i;
		if(i > n) break;
		vst[a[i].id] = 1;
		if(a[i].l > nw || a[i].r < nw){
			if(abs(nw - a[i].l) < abs(nw - a[i].r)){
				as += abs(nw - a[i].l);
				nw = a[i].l;
			}
			else{
				as += abs(nw - a[i].r);
				nw = a[i].r;
			}
		}
	}
	while(j < n){
		++j;
		while(vst[b[j].id] && j <= n) ++j;
		if(j > n) break;
		vst[b[j].id] = 1;
		if(b[j].l > nw || b[j].r < nw){
			if(abs(nw - b[j].l) < abs(nw - b[j].r)){
				as += abs(nw - b[j].l);
				nw = b[j].l;
			}
			else{
				as += abs(nw - b[j].r);
				nw = b[j].r;
			}
		}
	}
	as += abs(nw);
	memset(vst,0,sizeof(vst));
	nw = 0;
	i = j = 0;
	while(i < n && j < n){
		++j;
		while(vst[b[j].id] && j <= n) ++j;
		if(j > n) break;
		vst[b[j].id] = 1;
		if(b[j].l > nw || b[j].r < nw){
			if(abs(nw - b[j].l) < abs(nw - b[j].r)){
				as2 += abs(nw - b[j].l);
				nw = b[j].l;
			}
			else{
				as2 += abs(nw - b[j].r);
				nw = b[j].r;
			}
			//cout<<nw<<endl;
		}
		++i;
		while(vst[a[i].id] && i <= n) ++i;
		if(i > n) break;
		vst[a[i].id] = 1;
		if(a[i].l > nw || a[i].r < nw){
			if(abs(nw - a[i].l) < abs(nw - a[i].r)){
				as2 += abs(nw - a[i].l);
				nw = a[i].l;
			}
			else{
				as2 += abs(nw - a[i].r);
				nw = a[i].r;
			}
			//cout<<nw<<endl;
		}
	}
	while(i < n){
		++i;
		while(vst[a[i].id] && i <= n) ++i;
		if(i > n) break;
		vst[a[i].id] = 1;
		if(a[i].l > nw || a[i].r < nw){
			if(abs(nw - a[i].l) < abs(nw - a[i].r)){
				as2 += abs(nw - a[i].l);
				nw = a[i].l;
			}
			else{
				as2 += abs(nw - a[i].r);
				nw = a[i].r;
			}
		}
	}
	while(j < n){
		++j;
		while(vst[b[j].id] && j <= n) ++j;
		if(j > n) break;
		vst[b[j].id] = 1;
		if(b[j].l > nw || b[j].r < nw){
			if(abs(nw - b[j].l) < abs(nw - b[j].r)){
				as2 += abs(nw - b[j].l);
				nw = b[j].l;
			}
			else{
				as2 += abs(nw - b[j].r);
				nw = b[j].r;
			}
		}
	}
	as2 += abs(nw);
	print(max(as,as2));
	return 0;
}

Measured memory_bytes: 2688