← Home
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!();
}