class Card
  attr_reader :type, :num
  def initialize(type, num)
    @type = type
    @num = num
  end
end

def quicksort(a, p, r)
  if p < r then
    q = partition(a, p, r)
    quicksort(a, p, q-1)
    quicksort(a, q+1, r)
  end
end

def partition(a, p, r)
  x = a[r].num
  i = p - 1
  p.upto(r-1){|j|
    if a[j].num <= x then
      i += 1
      a[i], a[j] = a[j], a[i]
    end
  }
  a[i+1], a[r] = a[r], a[i+1]
  return i+1
end

def merge(a, left, mid, right)
  n1 = mid - left
  n2 = right - mid
  _L = a[left..mid-1]
  _R = a[mid..right-1]
  _L[n1] = Card.new(" ", 1.0 / 0.0)
  _R[n2] = Card.new(" ", 1.0 / 0.0)
  i = j = 0
  left.upto(right-1){|k|
    if _L[i].num <= _R[j].num then
      a[k] = _L[i]
      i += 1
    else
      a[k] = _R[j]
      j += 1
    end
  }
  return right - left
end

def mergeSort(a, left, right)
  count = 0
  if left+1 < right then
    mid = (left + right) / 2
    count += mergeSort(a, left, mid)
    count += mergeSort(a, mid, right)
    count += merge(a, left, mid, right)
  end
  return count
end

n = gets.to_i
arr = $stdin.readlines
a = []
i = 0
arr.each{|card|
  type, num = card.split
  a[i] = Card.new(type, num.to_i)
  i += 1
}
b = a.clone
quicksort(a, 0, n-1)
mergeSort(b, 0, n)
puts a == b ? "Stable" : "Not stable"
0.upto(n-1){|j|
  printf "%s %d\n", a[j].type, a[j].num
}