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

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

int isStable(char in[N][2],char out[N][2],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][1]==in[j][1] && in[i][0]==out[b][0] && in[j][0] == out[a][0] && in[i][1]==out[b][1] && in[j][1] == out[a][1]){
	    return 0;
	  }
	}
      }
    }
  }
  return 1;
}