#include <stdio.h>
#include <string.h>
#define N 100000
char A[N],B[N];
int A1[N],B1[N];
void quicksort(int p, int r);
int partition(int p,int r);
int isStable(char in[N],char out[N],int in1[N],int out1[N],int n);
int main(){
  int i,n;
scanf("%d",&n);
 for(i=0;i<n;i++){
   scanf(" %c %d",&A[i],&A1[i]);
   B[i]=A[i];
   B1[i]=A1[i];
 }
 quicksort(0,n-1);
 
 
 if(isStable(&A[0],&B[0],&A1[0],&B1[0],n)==0) printf("Not stable\n");
 else printf("Stable\n");
 for(i=0;i<n;i++){
   printf("%c %d\n",A[i],A1[i]);
   }
 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,j,x,change1;
  char change; 
  x =A1[r];
  i = p-1;
  for(j = p;j<r;j++){
    if(A1[j]<=x){
      i = i+1;
      change=A[i];
      A[i]= A[j];
      A[j]=change;

      change1=A1[i];
      A1[i]= A1[j];
      A1[j]=change1;
    }
  }
  change=A[i+1];
  A[i+1]=A[r];
  A[r]=change;
  
  change1=A1[i+1];
  A1[i+1]=A1[r];
  A1[r]=change1;
  
  return i+1;
}

int isStable(char in[N],char out[N],int in1[N],int out1[N],int n){
  
  int i,j,a,b;
  
  for(i=0;i<n;i++){
    for(j=i+1;j<n;j++){
      for(a=0;a<n;a++){
	for(b=a+1;b<n;b++){
	  if(in1[i]==in1[j] && in[i]==out[b] && in[j] == out[a] && in1[i]==out1[b] && in1[j] == out1[a]){
	    return 0;
	  }
	}
      }
    }
  }
  return 1;
}