#include <stdio.h>
#define MAX 100000
struct Card{
  char a;
  int b;
};
struct Card L[MAX/2+2], R[MAX/2+2];
int n;

int isStable(struct Card b[], struct Card s[]){
  int i;

  for(i = 0; i < n; i++){
    if(b[i].a != s[i].a)  return 0;
  }
  return 1;
}

int partition(struct Card A[], int p, int r){
  int i, j;
  struct Card x, t;
  x = A[r];
  i = p - 1;
  for(j = p; j < r; j++){
    if(A[j].b <= x.b){
      i++;
      t = A[i];
      A[i] = A[j];
      A[j] = t;
    }
  }
  t = A[i+1];
  A[i+1] = A[r];
  A[r] = t;
  return i+1;
}

void BubbleSort(struct Card c[]){
  int i, j;
  struct Card k;

  for(i = 0; i < n; i++){
    for(j = n-1; j >= i+1; j--){
      if(c[j].b < c[j-1].b){
        k = c[j];
        c[j] = c[j-1];
        c[j-1] = k;
      }
    }
  }
}
void Quicksort(struct 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);
  }
}

int main()
{
  int i, v;
  struct Card x[MAX], y[MAX];
  char s[10];

  scanf("%d", &n);

  for(i = 0; i < n; i++){
    scanf("%s %d", s, &v);
    x[i].a = y[i].a = s[0];
    x[i].b = y[i].b = v;
  }
  Quicksort(x, 0, n-1);
  BubbleSort(y);
 if(isStable(x, y)) printf("Stable\n");
  else printf("Not stable\n");

  for(i = 0; i < n; i++) printf("%c %d\n", x[i].a, x[i].b);
  return 0;
}