fn read<T: std::str::FromStr>() -> T {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().parse().ok().unwrap()
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    read::<String>()
        .split_whitespace()
        .map(|e| e.parse().ok().unwrap())
        .collect()
}

fn read_vec2<T: std::str::FromStr>(n: u32) -> Vec<Vec<T>> {
    (0..n).map(|_| read_vec()).collect()
}
fn main(){
    let k = read::<i32>();
    let mut v = vec![1,2,3,4,5,6,7,8,9];
    let mut ans = 9;
    let mut sub = 9;
    loop{
        if ans == k {
            break;

        }
        sub = sub + 10;
        v.push(sub);
       ans = ans + 1;
    }
    for s in v{
        println!("{}", s);
    }
    // for i in 1..1000 as u32{

    //     let sum:f64 = i.to_string().chars().fold(0.0,|x,y| x+ y.to_digit(10).unwrap() as f64);
    //     let s:f64 = i.to_string().parse().unwrap();
    //     println!("{}",s/sum );
    // }
}