(* エラトステネスのふるい *)
let sieve :
  (* 素数かどうかを判定する自然数の上界 *)
  int ->
  (* 素数ならtrueを返す関数 *)
  (int -> bool)
  = fun n ->
    let a = Array.make n true in
    a.(0) <- false;
    a.(1) <- false;
    for p = 2 to int_of_float @@ ceil @@ sqrt @@ float_of_int n do
      if a.(p) then
        for i = p to (n - 1) / p do
          a.(p * i) <- false
        done
    done;
    Array.get a
 
let rec take n = function
  | [] -> []
  | x :: xs ->
      if n = 0 then []
      else x :: take (n - 1) xs
 
let () = Scanf.scanf "%d\n" @@ fun n ->
  let p = sieve 55555 in
  Array.init 55555 (fun i -> i)
  |> Array.to_list
  (*
   * (5i + 1) + (5j + 1) + (5k + 1) + (5l + 1) + (5m + 1) 
   * = 5 (i + j + k + l + m + 1)
   *)
  |> List.filter (fun n -> n mod 5 = 1 && p n)
  |> take n
  |> List.iter (Printf.printf "%d ")