#include<bits/stdc++.h>
using namespace std;
typedef complex<double> P;

double eps=1e-7;
bool eq(double a,double b){
  double EPS = max( abs(a) , abs(b) ) * eps;
  EPS=max(EPS,eps);
  return (-EPS<a-b&&a-b<EPS);
}

double cross(P a,P b){
  return imag(b*conj(a));
}

double dist(P a,P b,P c){
  b-=a;c-=a;
  return cross(b,c)/abs(b);
}

P reflect(P a,P b,P c){
  b-=a;c-=a;
  return a+conj(c/b)*b;
}

int N;
P t[1000];
map<int, map<int,bool> > mp;

bool check(P a,P b){
  bool res=true;
  int cnt=0;
  for(int i=0;i<N;i++){
    if( eq( 0, dist(a,b,t[i])) ){cnt++;continue;}
    P target=reflect(a,b,t[i]);
    int px=round(target.real());
    int py=round(target.imag());
    if(!eq(px,target.real()))res=false;
    if(!eq(py,target.imag()))res=false;
    if(mp.count(px)==0)res=false;
    if(mp[px].count(py)==0)res=false;
  }
  if(cnt>1 && cnt%2==1 )res=false;
  return res;
}

bool solve(){
  P b=t[0];
  int cnt=0;
  for(int i=1;i<N;i++){
    b+=t[i];
    double v=cross(t[1]-t[0],t[i]-t[0]);
    if(eq(v,0))cnt++;
  }
  if(cnt==N-1)return false;

  b/=(double)N;
  
  bool flag=false;
  for(int i=0;i<N;i++){
    P a=t[i];
    if( eq(0, abs(a-b) ) )continue;
    if(check(a,b))flag=true;
  }

  for(int i=0;i<2;i++){
    P c=t[i];
    for(int j=i+1;j<N;j++){
      P d=t[j];
      if(check(c,d))flag=true;
      P nc=(c+d)*0.5;
      P nd=nc+(d-c)*P(0,1);
      if(check(nc,nd))flag=true;
    }
  }
  
  return flag;
}

int main(){
  scanf("%d",&N);
  for(int i=0;i<N;i++){

    int x,y;
    scanf("%d %d",&x,&y);
    t[i]=P(x,y);
    mp[x][y]=true;
    for(int j=0;j<i;j++)assert(t[i]!=t[j]);
  }
  printf( solve() ? "Yes\n" : "No\n" );
  return 0;
}