#include #include typedef struct koord { int x , y ; } KOORD ; int N , kezdox , kezdoy , index , aktx , akty , aktk ; char kiir[1010] ; int rend[1010] ; KOORD eredeti[1010] ; int has ( const void * a , const void * b ) ; int main () { int i , j , k , nem ; scanf ( "%d" , &N ) ; while ( N != 0 ) { if ( N == 1 ) continue ; for ( i = 0 ; i < N ; i++ ) { scanf ( "%d %d" , &(eredeti[i].x) , &(eredeti[i].y) ) ; rend[i] = i ; } qsort ( rend , N , sizeof (int) , has ) ; /* for ( i = 0 ; i < N ; i++ ) printf ("\t\t\t\t%d %d\n" , eredeti[rend[i]].x , eredeti[rend[i]].y ) ; */ index = 0 ; kiir[0] = 'N' ; eredeti[rend[0]].x = -1 ; eredeti[rend[0]].y = -1 ; aktx = eredeti[rend[1]].x ; akty = eredeti[rend[1]].y ; aktk = 1 ; for ( i = 1 ; i < N - 1 ; i++ ) { /* for ( k = 0 ; k < N ; k++ ) printf ("\t\t\t\t%d %d\n" , eredeti[rend[k]].x , eredeti[rend[k]].y ) ; */ if ( eredeti[rend[aktk]].x == eredeti[0].x && eredeti[rend[aktk]].y == eredeti[0].y ) index = i ; /* printf ( "kooord: %d %d\n" , eredeti[rend[aktk]].x , eredeti[rend[aktk]].y ); */ if ( kiir[i-1] == 'N' || kiir[i-1] == 'S' ) { for ( j = aktk + 1 ; j < N ; j++ ) { /* printf ( "ert:%d %d\n" , eredeti[rend[j]].x , eredeti[rend[j]].y ) ; */ if ( akty == eredeti[rend[j]].y ) { kiir[i] = 'E' ; aktx = eredeti[rend[j]].x ; eredeti[rend[aktk]].x = -1 ; eredeti[rend[aktk]].y = -1 ; aktk = j ; j = N + 10 ; break ; } } if ( j != N + 10 ) { for ( j = aktk - 1 ; j > 0 ; j-- ) { if ( akty == eredeti[rend[j]].y ) { kiir[i] = 'W' ; aktx = eredeti[rend[j]].x ; eredeti[rend[aktk]].x = -1 ; eredeti[rend[aktk]].y = -1 ; aktk = j ; break ; } } } } nem = 0 ; if ( kiir[i-1] == 'W' || kiir[i-1] == 'E' ) { if ( aktk == N - 1 ) nem = 1 ; if ( nem != 1 ) for ( k = aktk+1 ; eredeti[rend[k]].x == -1 && k < N ; k++ ) ; if ( nem != 1 && eredeti[rend[k]].x == aktx ) { kiir[i] = 'N' ; akty = eredeti[rend[aktk+1]].y ; eredeti[rend[aktk]].x = -1 ; eredeti[rend[aktk]].y = -1 ; aktk = k ; } else { /* for ( k = 0 ; k < N ; k++ ) printf ( "\t\t\t%d\t%d\n" , eredeti[rend[k]].x , eredeti[rend[k]].y ) ; */ for ( k = aktk - 1 ; eredeti[rend[k]].x == -1 && k > 0 ; k-- ) ; kiir[i] = 'S' ; akty = eredeti[rend[k]].y ; eredeti[rend[aktk]].x = -1 ; eredeti[rend[aktk]].y = -1 ; aktk = k ; } } } if ( eredeti[rend[aktk]].x == eredeti[0].x && eredeti[rend[aktk]].y == eredeti[0].y ) index = i ; /* for( k = 0 ; k < N - 1 ; k++ ) printf ( "%c" , kiir[k] ) ; printf ("\n\n\n"); */ for ( k = index ; k < N - 1 ; k++ ) printf ( "%c" , kiir[k] ) ; if ( N != 2 ) printf ("W") ; for ( k = 0 ; k < index ; k ++ ) printf ( "%c" , kiir[k] ) ; printf ( "\n" ) ; scanf ( "%d" , &N ) ; } return 0 ; } int has ( const void * a , const void * b ) { int vissza ; vissza = eredeti[*(int*)a ].x - eredeti [*(int*) b ].x ; if ( vissza == 0 ) vissza = eredeti[*(int*) a ].y - eredeti [*(int*) b ].y ; return vissza ; }