#include <iostream>
#include <algorithm>
#include <math.h>
#include <fstream>
#define double long double
using namespace std;
double pi = 3.14159265359 ;
struct point
{
double x, y;
point( )
{
x = 0 ;
y = 0 ;
}
point( double _x, double _y)
{
x = _x;
y = _y;
}
} ;
double dist( point p1, point p2)
{
return ( p1.x - p2.x ) * ( p1.x - p2.x ) + ( p1.y - p2.y ) * ( p1.y - p2.y ) ;
}
double scalarMult( point p1, point p2, point p3)
{
double x1 = p2.x - p1.x , x2 = p3.x - p2.x , y1 = p2.y - p1.y , y2 = p3.y - p2.y ;
return x1 * x2 + y1 * y2;
}
double vectorMult( point p1, point p2, point p3)
{
double x1 = p2.x - p1.x , x2 = p3.x - p2.x , y1 = p2.y - p1.y , y2 = p3.y - p2.y ;
return x1 * y2 - x2 * y1;
}
point vect( point s, point f)
{
return point( f.x - s.x , f.y - s.y ) ;
}
double abs ( double v)
{
if ( v > 0 ) {
return v;
} else
{
return - v;
}
}
int main( )
{
freopen ( "ngon.in" , "r" , stdin ) ;
freopen ( "ngon.out" , "w" , stdout ) ;
int n;
cin >> n;
point points[ n] ;
for ( int i = 0 ; i < n; i++ )
{
double x, y;
cin >> x >> y;
points[ i] = point( x, y) ;
}
int p = 0 ;
double d = 0.09 ;
for ( int i = 0 ; i < n; i++ )
{
for ( int j = 0 ; j < i; j++ )
{
if ( dist( points[ i] , points[ j] ) > d)
{
p = i - j;
d = dist( points[ i] , points[ j] ) ;
}
}
}
double eps = 0.0000001 ;
for ( int i = 0 ; i < n; i++ )
{
int j = ( i + p) % n;
point v1 = vect( points[ i] , points[ j] ) ,
v2 = vect( points[ ( i + 1 ) % n] , points[ ( j + 1 ) % n] ) ,
v3 = vect( points[ ( i + 2 ) % n] , points[ ( j + 2 ) % n] ) ;
if ( abs ( dist( points[ i] , points[ j] ) - d) > eps ||
abs ( atan2 ( v1.y , v1.x ) + atan2 ( v3.x , v3.y ) - 2 * atan2 ( v2.y , v2.x ) ) > eps)
{
cout << "NO" ;
return 0 ;
}
}
cout << "YES" ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8bWF0aC5oPgojaW5jbHVkZSA8ZnN0cmVhbT4KCiNkZWZpbmUgZG91YmxlIGxvbmcgZG91YmxlCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKZG91YmxlIHBpID0gMy4xNDE1OTI2NTM1OTsKCnN0cnVjdCBwb2ludAp7CiAgICBkb3VibGUgeCwgeTsKCiAgICBwb2ludCgpCiAgICB7CiAgICAgICAgeCA9IDA7CiAgICAgICAgeSA9IDA7CiAgICB9CgogICAgcG9pbnQoZG91YmxlIF94LCBkb3VibGUgX3kpCiAgICB7CiAgICAgICAgeCA9IF94OwogICAgICAgIHkgPSBfeTsKICAgIH0KfTsKCmRvdWJsZSBkaXN0KHBvaW50IHAxLCBwb2ludCBwMikKewogICAgcmV0dXJuIChwMS54IC0gcDIueCkgKiAocDEueCAtIHAyLngpICsgKHAxLnkgLSBwMi55KSAqIChwMS55IC0gcDIueSk7Cn0KCmRvdWJsZSBzY2FsYXJNdWx0KHBvaW50IHAxLCBwb2ludCBwMiwgcG9pbnQgcDMpCnsKICAgIGRvdWJsZSB4MSA9IHAyLnggLSBwMS54LCB4MiA9IHAzLnggLSBwMi54LCB5MSA9IHAyLnkgLSBwMS55LCB5MiA9IHAzLnkgLSBwMi55OwogICAgcmV0dXJuIHgxICogeDIgKyB5MSAqIHkyOwp9Cgpkb3VibGUgdmVjdG9yTXVsdChwb2ludCBwMSwgcG9pbnQgcDIsIHBvaW50IHAzKQp7CiAgICBkb3VibGUgeDEgPSBwMi54IC0gcDEueCwgeDIgPSBwMy54IC0gcDIueCwgeTEgPSBwMi55IC0gcDEueSwgeTIgPSBwMy55IC0gcDIueTsKICAgIHJldHVybiB4MSAqIHkyIC0geDIgKiB5MTsKfQoKcG9pbnQgdmVjdChwb2ludCBzLCBwb2ludCBmKQp7CglyZXR1cm4gcG9pbnQoZi54IC0gcy54LCBmLnkgLSBzLnkpOwp9Cgpkb3VibGUgYWJzKGRvdWJsZSB2KQp7CiAgICBpZiAodiA+IDApIHsKICAgICAgICByZXR1cm4gdjsKICAgIH0gZWxzZQogICAgewogICAgICAgIHJldHVybiAtdjsKICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICBmcmVvcGVuKCJuZ29uLmluIiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJuZ29uLm91dCIsICJ3Iiwgc3Rkb3V0KTsKCiAgICBpbnQgbjsKICAgIGNpbiA+PiBuOwogICAgcG9pbnQgcG9pbnRzW25dOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgZG91YmxlIHgsIHk7CiAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICBwb2ludHNbaV0gPSBwb2ludCh4LCB5KTsKICAgIH0KICAgIAogICAgaW50IHAgPSAwOwogICAgZG91YmxlIGQgPSAwLjA5OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICB7CiAgICAJZm9yIChpbnQgaiA9IDA7IGogPCBpOyBqKyspCiAgICAJewogICAgCQlpZiAoZGlzdChwb2ludHNbaV0sIHBvaW50c1tqXSkgPiBkKQogICAgCQl7CiAgICAJCQlwID0gaSAtIGo7CiAgICAJCQlkID0gZGlzdChwb2ludHNbaV0sIHBvaW50c1tqXSk7CiAgICAJCX0KICAgIAl9CiAgICB9CgoJZG91YmxlIGVwcyA9IDAuMDAwMDAwMTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgewogICAgCWludCBqID0gKGkgKyBwKSAlIG47CiAgICAJcG9pbnQgdjEgPSB2ZWN0KHBvaW50c1tpXSwgcG9pbnRzW2pdKSwgCiAgICAJCSAgdjIgPSB2ZWN0KHBvaW50c1soaSArIDEpICUgbl0sIHBvaW50c1soaiArIDEpICUgbl0pLAogICAgCQkgIHYzID0gdmVjdChwb2ludHNbKGkgKyAyKSAlIG5dLCBwb2ludHNbKGogKyAyKSAlIG5dKTsKICAgIAlpZiAoYWJzKGRpc3QocG9pbnRzW2ldLCBwb2ludHNbal0pIC0gZCkgPiBlcHMgfHwgCiAgICAJCWFicyhhdGFuMih2MS55LCB2MS54KSArIGF0YW4yKHYzLngsIHYzLnkpIC0gMiAqIGF0YW4yKHYyLnksIHYyLngpKSA+IGVwcykKICAgIAl7CiAgICAJCWNvdXQgPDwgIk5PIjsKICAgIAkJcmV0dXJuIDA7CiAgICAJfQogICAgfQoKICAgIGNvdXQgPDwgIllFUyI7CiAgICByZXR1cm4gMDsKfQ==
compilation info
prog.cpp: In function 'int main()':
prog.cpp:98:72: error: call of overloaded 'abs(double)' is ambiguous
abs(atan2(v1.y, v1.x) + atan2(v3.x, v3.y) - 2 * atan2(v2.y, v2.x)) > eps)
^
In file included from /usr/include/c++/5/cstdlib:72:0,
from /usr/include/c++/5/bits/stl_algo.h:59,
from /usr/include/c++/5/algorithm:62,
from prog.cpp:2:
/usr/include/stdlib.h:775:12: note: candidate: int abs(int)
extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
^
prog.cpp:51:8: note: candidate: long double abs(long double)
double abs(double v)
^
In file included from /usr/include/c++/5/bits/stl_algo.h:59:0,
from /usr/include/c++/5/algorithm:62,
from prog.cpp:2:
/usr/include/c++/5/cstdlib:174:3: note: candidate: long long int std::abs(long long int)
abs(long long __x) { return __builtin_llabs (__x); }
^
/usr/include/c++/5/cstdlib:166:3: note: candidate: long int std::abs(long int)
abs(long __i) { return __builtin_labs(__i); }
^
stdout