Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <iostream>
- #include <set>
- #include <map>
- #include <vector>
- #include <string>
- #include <cstring>
- #include <algorithm>
- #include <memory.h>
- #include <utility>
- #include <cassert>
- using namespace std;
- #define forn( i,n ) for ( int i=0; i<(int)(n); i++ )
- #define pb push_back
- #define mp make_pair
- #define sz(a) (int)((a).size())
- typedef long long ll;
- typedef long double ld;
- typedef pair<int,int> pii;
- char mm[266];
- int n, X0, Y0, x[410], y[410];
- int L[1010], R[1010];
- bool LU()
- {
- forn( i, n ) if ( x[i] > X0 || y[i] < Y0 ) return false;
- return true;
- }
- bool LD()
- {
- forn( i, n ) if ( x[i] > X0 || y[i] > Y0 ) return false;
- return true;
- }
- bool RD()
- {
- forn( i, n ) if ( x[i] < X0 || y[i] > Y0 ) return false;
- return true;
- }
- bool RU()
- {
- forn( i, n ) if ( x[i] < X0 || y[i] < Y0 ) return false;
- return true;
- }
- void rotateLU()
- {
- forn( i, n ) x[i] = 2*X0 - x[i];
- mm['W'] = 'E';
- mm['E'] = 'W';
- }
- void rotateRD()
- {
- forn( i, n ) y[i] = 2*Y0 - y[i];
- mm['S'] = 'N';
- mm['N'] = 'S';
- }
- void rotateLD()
- {
- rotateLU();
- rotateRD();
- }
- int main()
- {
- scanf( "%d %d %d", &n, &X0, &Y0 );
- forn( i, n ) scanf( "%d %d", &x[i], &y[i] );
- mm['N'] = 'N';
- mm['S'] = 'S';
- mm['W'] = 'W';
- mm['E'] = 'E';
- if ( LU() ) rotateLU(); else
- if ( LD() ) rotateLD(); else
- if ( RD() ) rotateRD(); else
- if ( !RU() )
- {
- printf( "-1\n" );
- return 0;
- }
- forn( i, n )
- {
- x[i] -= X0;
- y[i] -= Y0;
- // printf( "-> %d %d\n", x[i], y[i] );
- }
- int rx = 0, ry = 1;
- forn( i, n )
- {
- rx = max( rx, x[i] );
- ry = max( ry, y[i] );
- }
- forn( i, 1000 ) L[i] = 10000, R[i] = -10000;
- L[0] = R[0] = 0;
- forn( i, n )
- {
- int cur = y[i] == ry ? y[i] - 1 : y[i];
- L[cur] = min( L[cur], x[i] );
- R[cur] = max( R[cur], x[i] );
- }
- for ( int i=ry-2; i>=0; i-- )
- L[i] = min( L[i], L[i+1] );
- for ( int i=1; i<ry; i++ )
- R[i] = max( R[i], R[i-1] );
- /*
- forn( i, ry )
- printf( "%d %d\n", L[i], R[i] );
- */
- forn( i, ry )
- {
- if ( L[i] > R[i] )
- {
- L[i] = L[i-1];
- R[i] = R[i-1];
- }
- if ( L[i] == R[i] )
- {
- if ( L[i] == 0 ) R[i]++; else
- if ( R[i] == rx ) L[i]--; else
- R[i]++;
- }
- }
- for ( int i=1; i<ry; i++ )
- if ( L[i] >= R[i-1] ) R[i-1] = L[i]+1;
- int ans = 0;
- forn( i, ry )
- ans += R[i] - L[i];
- rx = R[ry-1];
- printf( "%d\n", ans );
- forn( i, ry-1 )
- {
- putchar( mm['N'] );
- forn( q, L[i+1] - L[i] ) putchar( mm['E'] );
- }
- putchar( mm['N'] );
- forn( q, rx-L[ry-1] ) putchar( mm['E'] );
- for ( int i=ry-1; i>0; i-- )
- {
- putchar( mm['S'] );
- forn( q, R[i]-R[i-1] ) putchar( mm['W'] );
- }
- putchar( mm['S'] );
- forn( q, R[0] ) putchar( mm['W'] );
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement