#include<stdio.h>
#define max 100000
#define se 2000000000
struct Card{
  char Su;
  int Va;
};
struct Card L[max/2+2], R[max/2+2];
void merge(struct Card K[], int n, int left, int mid, int right){
  int i, j, k;
  int n1 = mid - left;
  int n2 = right - mid;
  for (i=0;i<n1;i++){
    L[i] = K[left + i];}
  for (i=0;i<n2;i++){
    R[i] = K[mid + i];}
  L[n1].Va=R[n2].Va=se;
  i=j=0;
  for (k=left;k<right;k++ ){
    if (L[i].Va<=R[j].Va){
      K[k] = L[i++];
    } else {
      K[k] = R[j++];
    }
  }
}
void mergeSort(struct Card A[], int n, int left, int right ){
  int mid;
  if (left+1<right){
    mid=(left+right)/2;
    mergeSort(A, n, left, mid);
    mergeSort(A, n, mid, right);
    merge(A, n, left, mid, right);
  }
}
void quickSort(struct Card A[], int n, int p, int r){
  int q;
  if ( p < r ){
    q=partition(A, n, p, r);
    quickSort(A, n, p, q - 1);
    quickSort(A, n, q + 1, r);
  }
}
int partition(struct Card A[], int n, int p, int r){
  int i, j;
  struct Card t, x;
  x=A[r];
  i=p-1;
  for (j=p;j<r;j++ ){
    if ( A[j].Va<=x.Va){
      i++;
      t=A[i];A[i]=A[j];A[j]=t;
    }
  }
  t=A[i+1];A[i+1]=A[r];A[r]=t;
  return i+1;
}


int main(){
  int n, i, v;
  struct Card P[max], K[max];
  char S[10];
  int stable=1;
  scanf("%d", &n);

  for ( i = 0; i < n; i++ ) {
    scanf("%s %d", S, &v);
    P[i].Su=K[i].Su=S[0];
    P[i].Va=K[i].Va=v;
  }

  mergeSort(P, n, 0, n);
  quickSort(K, n, 0, n-1);

  for (i=0;i<n;i++){
    if (P[i].Su!= K[i].Su) {
      stable = 0;}
  }
  if ( stable == 1 ){
    printf("Stable\n");}
  else printf("Not stable\n");
  for ( i = 0; i < n; i++ ) {
    printf("%c %d\n", K[i].Su, K[i].Va);
  }
}
