#include <stdio.h>

#define MAX 100000

typedef struct{
  char suit;
  int num;
}Card;

void quicksort(Card *,int,int);
int partition(Card *,int,int);
void bubblesort(Card *,int);
void swap(Card *,Card *);
int isStable(Card *,Card *,int);

int main(){
  Card c1[MAX],c2[MAX];
  int i,n,v;
  char P[20];
  
  scanf("%d",&n);

  for(i=0;i<n;i++){
    scanf("%s %d",P,&v);
    c2[i].suit = c1[i].suit = P[0];
    c2[i].num = c1[i].num = v;
  }
  
  bubblesort(c1,n);
  quicksort(c2,0,n-1);
  
  if(isStable(c1,c2,n))printf("Stable\n");
  else printf("Not stable\n");

  for(i=0;i<n;i++){
    printf("%c %d\n",c2[i].suit,c2[i].num);
  }

 
          
  return 0;
}

void bubblesort(Card A[],int n){
  int i,j,flag;

  flag = 1;

  while(flag){
    flag = 0;
    for(i=0;i < n;i++){
      for(j=n-1;j >= i+1;j--){

        if( A[j].num < A[j-1].num ){
          swap(&A[j],&A[j-1]);

          flag = 1;

        }
      }
    }
  }
}

void swap(Card *in,Card *out){
  Card temp;

  temp = *in;
  *in = *out;
  *out = temp;
}

int partition(Card A[],int p,int r){
  Card x;
  int i=0;
  int j;
   
  x = A[r];
  i = p-1;

  for(j=p;j<r;j++){
    if(A[j].num <= x.num){
      i = i+1;
      swap(&A[i],&A[j]);

    }
  }
  swap(&A[i+1],&A[r]);
  
  return i+1;
}

void quicksort(Card A[],int p,int r){
  int q;

  if(p<r){
    q = partition(A,p,r);
    quicksort(A,p,q-1);
    quicksort(A,q+1,r);
  }
}
/*
void print(Card A[],int n){
  int i;

  for(i=0;i<n;i++){
    
    printf("%c %d\n",A[i].suit,A[i].num);
  }
  printf("\n");
}
*/

int isStable(Card in[],Card out[],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( (in[i].num == in[j].num) && (in[i].num == out[b].num) &&  (in[i].suit == out[b].suit) && (in[j].num == out[a].num ) && (in[j].suit  == out[a].suit)){
            return 0;
          }

        }

      }

    }

  }

  return 1;
}

