use std::io;
use std::collections::HashMap;
fn main(){
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let n: usize = input.trim().parse().expect("Input is not an integer");
let mut startings: HashMap<i64, i32> = HashMap::new();
let mut endings: HashMap<i64, i32> = HashMap::new();
let mut all : Vec<i64> = Vec::new();
for _i in 0..n{
input.clear();
io::stdin().read_line(&mut input).expect("Failed to read line");
let params: Vec<i64> = input
.trim()
.split_whitespace()
.map(|x| x.parse().expect("Not an integer"))
.collect();
let l = params[0];
let r = params[1];
let count = startings.entry(l).or_insert(0);
*count += 1;
let count = endings.entry(r).or_insert(0);
*count += 1;
all.push(l);
all.push(r);
}
all.sort();
all.dedup();
// println!("{:?}", all);
let mut ans = vec![0;n+1];
let mut curr = 0;
for i in 0..all.len(){
if i == 0 {
let score1 = startings.get(&all[0]).copied().unwrap_or(0);
let score2 = endings.get(&all[0]).copied().unwrap_or(0);
ans[(score1) as usize] += 1;
curr += score1 - score2;
}else{
ans[curr as usize] += all[i]-all[i-1]-1;
let score1 = startings.get(&all[i]).copied().unwrap_or(0);
let score2 = endings.get(&all[i]).copied().unwrap_or(0);
ans[(score1+curr) as usize] += 1;
curr += score1-score2;
}
}
for i in 1..ans.len(){
print!("{} ", ans[i]);
}
println!();
}