#include<stdio.h>

typedef long l;
int n;


int Partition(char ID[],l A[],l p,l r){
  l x = A[r];
  l i = p-1;
  int j;
  for(j=p;j<r;j++){
    if(A[j] <= x){
      i = i+1;
      char ch = ID[i];
      ID[i] = ID[j];
      ID[j] = ch;
      l h=A[i];
      A[i] = A[j];
      A[j] = h;
    }
  }
  char ch = ID[i+1];
  ID[i+1] = ID[r];
  ID[r] = ch;
  l h = A[i+1];
  A[i+1] = A[r];
  A[r] = h;
  return i+1;
}

void Quicksort(char ID[],l A[],l p,l r){
  if(p<r){
    l q = Partition(ID,A,p,r);
    Quicksort(ID,A,p,q-1);
    Quicksort(ID,A,q+1,r);
  }
}


int main(){
  
  while(scanf("%d\n",&n)!=EOF){
    l k=0;
    l A[n+2];
    l idA[n+2];
    int i,j;
    char idID[n+2],ID[n+2];
    for(i=1;i<=n;i++){
      //cin >> ID[i] >> A[i];
      scanf("%c %ld\n",&ID[i],&A[i]);
      idID[i] = ID[i];
      //idA[i] = A[i];
      if(k<A[i])k=A[i];
    }
   
    A[n+1] = 1000000000;
    l used[n+1];
    for(i=1;i<=n;i++)used[i] = 0;
    l min;
    for(i=1;i<=n;i++){
      min = n+1;
      for(j=1;j<=n;j++){
	if(used[j] == 0 && A[min] > A[j])min=j;
      }
      used[min] = 1;
      idID[i] = ID[min];
      idA[i]=A[min];
    }

    
    /*
    cout << "--------------------------" << endl;
    for(int i=1;i<=n;i++){
      // printf("%c %d\n",idID[i],idA[i]);
      cout << idID[i] << " " << idA[i] << endl;
    }
    cout << "---------------------------" << endl;
    */

    Quicksort(ID,A,1,n);
    int stable = 1;
    for(i=1;i<=n;i++){
      if(idID[i] != ID[i])stable = 0;
    }

    if(stable == 1)printf("Stable\n");
    else printf("Not stable\n");
    for(i=1;i<=n;i++){
    printf("%c %ld\n",ID[i],A[i]);
    }
  }
  return 0;
}