#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int ll; typedef unsigned long long int ull; typedef pair pii; #define PB push_back #define MP make_pair #define FOR(prom, a, b) for(int prom = (a); prom < (b); prom++) #define FORD(prom, a, b) for(int prom = (a); prom > (b); prom--) #define FORDE(prom, a, b) for(int prom = (a); prom >= (b); prom--) #define MM(co, cim) memset((co), (cim), sizeof((co))) #define DEB(x) cerr << ">>> " << #x << " : " << x << endl; #define MAXA 1000001000 char nextSmer ( char s ) { switch ( s ) { case 'U': return 'R'; case 'R': return 'D'; case 'D': return 'L'; case 'L': return 'U'; } return 'X'; } int main ( void ) { int N, A; while ( scanf( "%d", &N ) == 1 ) { char smer = 'U'; int posX, posY; posX = posY = 0; int minX, maxX, minY, maxY; maxX = maxY = MAXA; minX = minY = -MAXA; int prevXX, prevXY, prev2XX, prev2XY; int prevYX, prevYY, prev2YX, prev2YY; prevXX = prevXY = prev2XX = prev2XY = 0; prevYX = prevYY = prev2YX = prev2YY = 0; if ( N <= 3 ) { printf("OK\n"); for ( int n = 0; n < N; n++ ) scanf( "%d", &A ); continue; } bool ok = true; for ( int n = 0; n < N; n++ ) { scanf( "%d", &A ); if ( !ok ) continue; switch ( smer ) { case 'U': if ( posY + A >= maxY ) { printf( "%d\n", n ); ok = false; break; } else if ( posY + A <= prevXY ) { minX = posX; minY = posY; maxY = posY + A; if ( posY + A >= prev2XY ) { maxX = prev2XX; } else { maxX = prevXX; } } break; case 'R': if ( posX + A >= maxX ) { printf( "%d\n", n ); ok = false; break; } else if ( posX + A <= prevYX ) { maxY = posY; minX = posX; maxX = posX + A; if ( posX + A >= prev2YX ) { minY = prev2YY; } else { minY = prevYY; } } break; case 'D': if ( posY - A <= minY ) { printf( "%d\n", n ); ok = false; break; } else if ( posY - A >= prevXY ) { maxX = posX; maxY = posY; minY = posY - A; if ( posY - A <= prev2XY ) { minX = prev2XX; } else { minX = prevXX; } } break; case 'L': if ( posX - A <= minX ) { printf( "%d\n", n ); ok = false; break; } else if ( posX - A >= prevYX ) { minY = posY; maxX = posX; minX = posX - A; if ( posX - A <= prev2YX ) { maxY = prev2YY; } else { maxY = prevYY; } } break; } switch ( smer ) { case 'U': case 'D': prev2XX = prevXX; prev2XY = prevXY; prevXX = posX; prevXY = posY; break; case 'R': case 'L': prev2YX = prevYX; prev2YY = prevYY; prevYX = posX; prevYY = posY; break; } switch ( smer ) { case 'U': posY = posY + A; break; case 'R': posX = posX + A; break; case 'D': posY = posY - A; break; case 'L': posX = posX - A; break; } smer = nextSmer( smer ); /* cerr << "pos = [" << posX << "," << posY << "]" << endl << "boundX = [ " << minX << "," << maxX << "]" << endl << "boundY = [ " << minY << "," << maxY << "]" << endl << "prevX [" << prevXX << "," << prevXY << "] -> [" << prev2XX << "," << prev2XY << "]" << endl << "prevY [" << prevYX << "," << prevYY << "] -> [" << prev2YX << "," << prev2YY << "]" << endl << "-------" << endl; /* DEB( posX ); DEB( posY ); DEB( prevXX ); DEB( prevXY ); DEB( prev2XX ); DEB( prev2XY ); DEB( minX ); DEB( maxX ); DEB( minY ); DEB( maxY );//*/ } if ( ok ) { printf( "OK\n" ); } } return 0; }