#include <bits/stdc++.h>
template <typename T>
inline T abs(T a) {
  return a < 0 ? -a : a;
}
template <typename T>
inline T min(T a, T b) {
  return a < b ? a : b;
}
template <typename T>
inline T max(T a, T b) {
  return a > b ? a : b;
}
template <typename T>
inline void swap(T& a, T& b) {
  T t = a;
  a = b, b = t;
}
template <typename T>
inline bool umin(T& mn, T u) {
  return u < mn ? mn = u, true : false;
}
template <typename T>
inline bool umax(T& mx, T u) {
  return u > mx ? mx = u, true : false;
}
template <typename T>
inline void read(T& r) {
  char c;
  r = 0;
  bool flag = false;
  do c = getchar();
  while (c != '-' && (c < '0' || c > '9'));
  if (c == '-') flag = true, c = getchar();
  do r = r * 10 + c - '0', c = getchar();
  while (c >= '0' && c <= '9');
  if (flag) r *= -1;
}
template <typename T>
inline void read(T& r, T& s) {
  read(r), read(s);
}
template <typename T>
inline void read(T& r, T& s, T& t) {
  read(r), read(s), read(t);
}
template <typename T>
inline void read(T& r, T& s, T& t, T& u) {
  read(r), read(s), read(t), read(u);
}
template <typename T>
inline void write(T w, const char* c = "") {
  if (w == 0)
    putchar('0');
  else {
    if (w < 0) putchar('-'), w *= -1;
    static int s[21], top;
    top = 0;
    while (w) s[top++] = w % 10, w /= 10;
    while (top--) putchar(s[top] + '0');
  }
  for (int i = 0; c[i]; i++) putchar(c[i]);
}
std::pair<double, double> p, u, v, ori;
const double pi = 3.14159265358979323846;
inline double Dot(std::pair<double, double> a, std::pair<double, double> b) {
  return a.first * b.first + a.second * b.second;
}
inline double Cross(std::pair<double, double> a, std::pair<double, double> b) {
  return a.first * b.second - a.second * b.first;
}
inline std::pair<double, double> Vector(std::pair<double, double> a,
                                        std::pair<double, double> b) {
  return std::pair<double, double>(b.first - a.first, b.second - a.second);
}
double dist(std::pair<double, double> a, std::pair<double, double> b) {
  return sqrt((a.first - b.first) * (a.first - b.first) +
              (a.second - b.second) * (a.second - b.second));
}
double dist(std::pair<double, double> a, std::pair<double, double> b,
            std::pair<double, double> c) {
  if (Dot(Vector(b, c), Vector(b, a)) < 0) return dist(a, b);
  if (Dot(Vector(c, b), Vector(c, a)) < 0) return dist(a, c);
  return abs(Cross(Vector(b, a), Vector(b, c)) / dist(b, c));
}
int main() {
  double maxdis = 0, mindis = 4000000000000;
  int n;
  scanf("%d", &n);
  n--;
  scanf("%lf%lf%lf%lf", &p.first, &p.second, &u.first, &u.second);
  ori = u;
  while (n--) {
    scanf("%lf%lf", &v.first, &v.second);
    umin(mindis, dist(p, u, v));
    umax(maxdis, dist(p, v));
    u = v;
  }
  umin(mindis, dist(p, u, ori));
  umax(maxdis, dist(p, ori));
  printf("%.10lf", pi * (maxdis * maxdis - mindis * mindis));
  return 0;
}
