let (>>=) x f = match x with None -> None | Some x -> f x

let rec rm_rightest temp i = function
  | [] -> None
  | b::bs -> 
     if i = b then Some (b, List.fold_left (fun acc b -> b::acc) bs temp) 
     else rm_rightest (b::temp) (i - 1) bs

let solve bs n =
  let rec inner ans n = function
    | [] -> Some ans
    | bs ->
(*       print_string "n: "; print_endline @@ string_of_int n;
       print_string "bs: "; List.iter (fun n -> print_int n; print_string "; ") bs;
       print_endline ""; *)
       rm_rightest [] n bs >>= fun (b, bs) ->
(*       print_string "b, bs: "; print_int b; print_string " | ";
       List.iter(fun n -> print_int n; print_string "; ") bs;
       print_endline "";*)
       inner (b::ans) (n - 1) bs
  in inner [] n bs

let print_result = function
  | None -> print_int (-1)
  | Some ans -> List.iter (fun n -> print_int n; print_endline "") ans

let _ =
  let n = Scanf.scanf "%d\n" (fun n -> n) in
  let bs = ref [] in
  for i = 0 to n - 1 do
    Scanf.scanf (if i <> n - 1 then "%d " else "%d\n") (fun b -> bs := b::!bs)
  done;
  solve !bs n
  |> print_result