#include <stdio.h>
#include <stdlib.h>
struct card{
  char handle;
  int num;
};
void quicksort(int,int);
int partition(int,int);
void merge(struct card *,int,int,int);
void mergesort(struct card *,int,int);
struct card A[100000];
int main(){
  int n,i;
  char dummy;
  struct card c[100000];
  scanf("%d",&n);
  for(i=0;i<n;i++){
    scanf("%c %c",&dummy,&A[i].handle);
    scanf("%d",&A[i].num);
    c[i]=A[i];
  }
  printf("\n");
  mergesort(A,0,n);
  quicksort(0,n);
  int cnt=0;
  for(i=0;i<n;i++){
    if(A[i].handle!=c[i].handle){
      printf("Not stable\n");
      cnt++;
      break;
    }
  }
  if(cnt==0)printf("Stable\n");
  for(i=0;i<n;i++)printf("%c %d\n",A[i].handle,A[i].num);
  printf("\n");
  return 0;
}
void quicksort(int p,int r){
  int q;
  if(p<r){
    q=partition(p,r);
    quicksort(p,q-1);
    quicksort(q+1,r);
  }
}
int partition(int p,int r){
  int i,q,cnt=p-1;
  q=A[r-1].num;
  struct card j;
  for(i=p;i<r;i++){
    if(A[i].num<=q){
      cnt++;
      j=A[i];
      A[i]=A[cnt];
      A[cnt]=j;
    }
  }
}
void mergesort(struct card *c,int left,int right){
  if(left+1<right){
    int mid=(left+right)/2;
    mergesort(c,left,mid);
    mergesort(c,mid,right);
    merge(c,left,mid,right);
  }
}
void merge(struct card *c,int left,int mid,int right){
  int n1=mid-left,n2=right-mid;
  struct card *L,*R;
  L=malloc(sizeof(struct card)*(n1+2));
  R=malloc(sizeof(struct card)*(n2+2));
  int i;
  for(i=0;i<n1;i++)L[i]=c[i+left];
  for(i=0;i<n2;i++)R[i]=c[i+mid];
  L[n1].num=R[n2].num=2000000000;
  int j=0,k;
  i=0;
  for(k=left;k<right;k++){
    if(L[i].num<=R[j].num)c[k]=L[i++];
    else c[k]=R[j++];
  }
  free(L);
  free(R);
}




