#include<stdio.h>

typedef struct {
	char mark;
	int num;
}card;

void swap(card *a,card *b);
int partition(card A[], int p, int r);
void quickSort(card A[], int p, int r);

int partition(card A[], int p, int r){
	int x=A[r].num;
	int i=p-1,j;
	for(j=p;j<r;j++){
		if(A[j].num<=x){
			i++;
			swap(&(A[i]),&(A[j]));
		}
	}
	swap(&(A[i+1]),&(A[r]));
	return i+1;
}

void swap(card *a,card *b){
	card tmp;
	tmp=*a;
	*a=*b;
	*b=tmp;
}

void quickSort(card A[],int p,int r){
	if(p<r){
		int q = partition(A,p,r);
		quickSort(A,p,q-1);
		quickSort(A,q+1,r);
	}
}

int main(void){
	static card A[100000],copy[100000];
	int n,base;
	int i,j;
	char mark_checker[4],checker_crt;
	int s_flag=1;
	scanf("%d%*c",&n);
	for(i=0;i<n;i++){
		scanf("%c%d%*c",&(A[i].mark),&(A[i].num));
	}
	for(i=0;i<n;i++){
		copy[i]=A[i];
	}
	quickSort(A,0,n-1);
	for(i=0;i<n-1;i++){
		if(A[i].num==A[i+1].num){
			base=A[i].num;
			mark_checker[0]=A[i].mark;
			mark_checker[1]=A[i+1].mark;
			if(i+2<n && base==A[i+2].num){
				mark_checker[2]=A[i+2].mark;
				if(i+3<n && base==A[i+3].num){
					mark_checker[3]=A[i+3].mark;
					i=i+3;
				}else{
					mark_checker[3]='\0';
					i=i+2;
				}
			}else{
				mark_checker[2]='\0';
				i=i+1;
			}
			checker_crt=0;
			for(j=0;j<n;j++){
				if(copy[j].num==base){
					if(mark_checker[checker_crt++]!=copy[j].mark){
						s_flag=0;
					}
				}
			}
		}
	}		
	if(s_flag){
		printf("Stable\n");
	}else{
		printf("Not stable\n");
	}	
	for(i=0;i<n;i++){
		printf("%c %d\n",A[i].mark,A[i].num);
	}
	return 0;
}