#include<stdio.h>

#define N 100000

typedef struct{
  int Num;
  char Spel;
}Tarot;

void Quick(int, int);

Tarot Qui[N];
int loop;

int main(){
  Tarot Sort[N],temp;
  int i,j;
  int min,flag=0;
  
  scanf("%d",&loop);
  for(i=0;i<loop;i++){
    scanf("%s %d ",&Qui[i].Spel,&Qui[i].Num);
    Sort[i].Num=Qui[i].Num;
    Sort[i].Spel=Sort[i].Spel;
  }

  Quick(0,loop-1);

  for(i=0;i<loop-1;i++){
    min=i;
    for(j=i;j<loop;j++){
      if(Sort[j].Num<Sort[j-1].Num){
	min=j;
      }
    }
    temp=Sort[i];
    Sort[i]=Sort[min];
    Sort[min]=temp;
  }

  for(i=0;i<loop;i++){
    if(Qui[i].Spel!=Sort[i].Spel){
      flag=1;
      break;
    }
  }

  if(flag==0){
    printf("Stable\n");
  }

  else{
    printf("Not stable\n");
  }
  
  for(i=0;i<loop;i++){
    printf("%c %d\n",Qui[i].Spel,Qui[i].Num);
  }
  
  return 0;
}

void Quick(int zero,int set){
  Tarot temp;
  int last,point,init;
  int i;

  if(zero<set){
  
  last=Qui[loop-1].Num;
  init=-1;
  
  for(i=0;i<loop-1;i++){

    if(last>=Qui[i].Num){
      init+=1;
      temp.Num=Qui[init].Num;
      Qui[init].Num=Qui[i].Num;
      Qui[i].Num=temp.Num;
    }
  }

  temp.Num=Qui[init+1].Num;
  Qui[init+1].Num=Qui[loop-1].Num;
  Qui[loop-1].Num=temp.Num;

  point=init+1;

  Quick(zero,point-1);
  Quick(point+1,set);
  
  }
  
}


