def quiksort(arr,p,r)
    if p < r
        q =partition(arr,p,r)
        quiksort(arr,p,q-1)
        quiksort(arr,q+1,r)
    end
    return arr
end

def merge(arr,left,mid,right)
    n1 = mid-left
    n2 = right-mid
    l = []
    r = []
    i = 0
    while i < n1
         l[i] =arr[left+i]
         i +=1
    end
    i = 0
    while i < n2
        r[i] = arr[mid+i]
        i +=1
    end
    l[n1] = "A",9999999999
    r[n2] = "A",9999999999
    i = 0
    j = 0
    k = left
    while k < right
        if l[i][1] <= r[j][1]
            arr[k] = l[i]
            i +=1
        else
            arr[k] = r[j]
            j +=1
        end
        k +=1
    end
end

def mergesort(arr,left,right)
    #leftは配列の先頭だから常に0。関数の中で関数を呼び出すからひたすら配列の要素が一つだけになるまでマージソートを繰り返す
    #要素の分解が１まできたことを表す。
    if left+1 < right
        mid =(left+right)/2
        #配列の左半分
        mergesort(arr,left,mid)
        #配列の右半分
        mergesort(arr,mid,right)
        merge(arr,left,mid,right)
    end
    return arr
end

def partition(arr,p,r)
    x = arr[r][1]
    i = p-1
    j = p
    while j < r
        if arr[j][1] <= x
            i +=1
            arr[i],arr[j] = arr[j],arr[i]
        end
        j +=1
    end
    arr[i+1],arr[r] =arr[r],arr[i+1]
    return i+1
end

n =gets.to_i
arr=[]
n.times do
    arr << gets.split(" ")
    arr.last[1] = arr.last[1].to_i
end
arr2 = arr.dup

arr  =mergesort(arr,0,n)
arr2 =quiksort(arr2,0,n-1)

if arr == arr2
    puts "Stable"
else
    puts "Not stable"
end

arr2.each do |obj,obj2|
    puts "#{obj} #{obj2}"
end
