#include<stdio.h>

#define MAX 100000
 
struct Cards {
	char pattern[2];
	int num;
	int order;
};

void exchange( struct Cards *pa, struct Cards *pb )
{
	struct Cards t;
	
	t=*pa;
	*pa=*pb;
	*pb=t;

	return;
}

int Partition( struct Cards A[], int p, int r )
{
	struct Cards x;
	int i,j;

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

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

	return i+1;
}
void QuickSort( struct Cards 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 );
	}
	return;
}
int isStable( int n, struct Cards A[], struct Cards B[] )
{
	int i;
	int lo,mi,hi;
	int res=0;
	int s,e,t;
	
	res=1;
    for( i=0; i<n; i++ ) {
        lo=0;
        hi=n;
        while( lo <= hi ) {
            mi=(lo+hi)/2; 
            if( B[i].num == A[mi].num ) {
            	if( A[mi].order ) {
            		if( A[ A[mi].order ].pattern[0] == B[i].pattern[0] ) {
            			e=s=mi;
		            	while( B[i].num == A[s].num ) { s--; }
		            	s++;
		            	while( B[i].num == A[e].num ) { e++; }
		            	e--;
            			t=A[mi].order+1;
		            	while( s<=e ) {
		            		A[s++].order=t;
		        		}
            		} else {
            			res=0;
            		}
            	} else {
	            	while( B[i].num == A[s].num ) { s--; }
	            	s++;
	            	while( B[i].num == A[e].num ) { e++; }
	            	e--;
        			t=A[mi].order+1;
	            	while( s<=e ) {
	            		A[s++].order=t;
	        		}
        		}
                break;
            } else if( B[i].num < A[mi].num ) {
                hi=mi-1;
            } else {
                lo=mi+1;         
            }
        }
        if( !res ) {
        	break;
        }
    }
  
   return res;
}

int main( void ) 
{	
	int n,i;
	struct Cards A[MAX+1];
	struct Cards B[MAX+1];
		
    scanf( "%d", &n );
	for( i=0; i<n; i++ ) {
		scanf( "%s%d", A[i].pattern, &A[i].num );
		A[i].order=0;
		B[i]=A[i];
	}
	QuickSort( A, 0, n-1 );
	
	if( isStable( n, A, B ) ) {
		printf( "Stable\n" );
	} else {
		printf( "Not stable\n" );
	}
	for( i=0; i<n; i++ ) {
		printf( "%s %d\n", A[i].pattern, A[i].num );
	}

    return 0;
}