type t = {
  id : int;
  ch : char;
  num : int;
}

let a = Array.make 100001 { id = 0; ch = '\000'; num = 0 }

let rec partitoin r = function
  | (i, j) when j = r ->
    let tmp = a.(i) in
    a.(i) <- a.(j);
    a.(j) <- tmp;
    i
  | (i, j) when a.(j).num <= a.(r).num ->
    let tmp = a.(i) in
    a.(i) <- a.(j);
    a.(j) <- tmp;
    partitoin r (i + 1, j + 1)
  | (i, j) ->
    partitoin r (i, j + 1)

let rec quick_sort p r =
  if p < r then begin
    let q = partitoin r (p, p) in
    quick_sort p (q - 1);
    quick_sort q r
  end

let rec stable_str n i =
  if i = n then "Stable"
  else if a.(i-1).num = a.(i).num && a.(i-1).id > a.(i).id then "Not stable"
  else stable_str n (i + 1)

let rec split str delim acc =
  let open String in
  match
    try Some (rindex str delim) with _ -> None
  with
  | None -> str :: acc
  | Some i -> split (sub str 0 i) delim (sub str (i + 1) (length str - i - 1) :: acc)

let rec read i n =
  if i < n then begin
    begin match split (read_line ()) ' ' [] with
    | [c; d] -> a.(i) <- { id = i; ch = c.[0]; num = int_of_string d }
    | _ -> exit 1
    end;
    read (i + 1) n
  end

let rec print i n =
  if i < n then begin
    print_char a.(i).ch;
    print_string " ";
    print_int a.(i).num;
    print_string "\n";
    print (i + 1) n
  end

let () =
  let n = read_int () in
  read 0 n;
  quick_sort 0 (n - 1);
  print_endline (stable_str n 1);
  print 0 n