#include <bits/stdc++.h>
using namespace std;
struct Vector {
  long long x, y;
  Vector(long long a = 0, long long b = 0) : x(a), y(b) {}
  Vector(const Vector& v) : x(v.x), y(v.y) {}
  Vector& operator=(const Vector& v) {
    x = v.x;
    y = v.y;
    return *this;
  }
  Vector operator+(const Vector& v) const { return Vector(x + v.x, y + v.y); }
  Vector& operator+=(const Vector& v) {
    x += v.x;
    y += v.y;
    return *this;
  }
  Vector operator-(const Vector& v) const { return Vector(x - v.x, y - v.y); }
  Vector& operator-=(const Vector& v) {
    x -= v.x;
    y -= v.y;
    return *this;
  }
  Vector operator*(long long n) const { return Vector(x * n, y * n); }
  Vector& operator*=(long long n) {
    x *= n;
    y *= n;
    return *this;
  }
  Vector operator/(long long n) const { return Vector(x / n, y / n); }
  Vector& operator/=(long long n) {
    x /= n;
    y /= n;
    return *this;
  }
  bool operator==(const Vector& v) const { return x == v.x && y == v.y; }
  bool operator!=(const Vector& v) const { return x != v.x || y != v.y; }
  bool operator<(const Vector& v) const {
    return x < v.x || (x == v.x && y < v.y);
  }
  double size() const { return sqrt(x * x + y * y); }
  long long size2() const { return x * x + y * y; }
  double angle() const { return atan2(y, x); }
};
inline long long dot_product(const Vector& v1, const Vector& v2) {
  return v1.x * v2.x + v1.y * v2.y;
}
inline long long xp(const Vector& v1, const Vector& v2) {
  return v1.x * v2.y - v1.y * v2.x;
}
int lineIntersect(Vector A, Vector a, Vector B, Vector b,
                  pair<double, double>& inter) {
  int ret = (xp(a, b) == 0LL) ? ((xp(B - A, a) == 0LL) ? 0 : 1) : 2;
  if (ret == 2)
    inter = make_pair((double)xp(B - A, b) / xp(a, b),
                      (double)xp(A - B, a) / xp(b, a));
  return ret;
}
Vector P[100007];
int main() {
  int N;
  scanf("%d ", &N);
  ;
  long long x, y;
  cin >> x >> y;
  Vector A(x, y);
  cin >> x >> y;
  Vector B(x, y);
  P[0] = B;
  long long dmx = (A - B).size2(), dmn = (A - B).size2();
  for (int i = (1); i < (N); i++) {
    cin >> x >> y;
    B = Vector(x, y);
    dmx = max(dmx, (A - B).size2());
    dmn = min(dmn, (A - B).size2());
    P[i] = B;
  }
  double ddmn = dmn, ddmx = dmx;
  for (int i = (0); i < (N); i++) {
    Vector dir = P[(i + 1) % N] - P[i];
    Vector norm(dir.y, -dir.x);
    pair<double, double> r;
    if (lineIntersect(P[i], dir, A, norm, r) == 2) {
      if (r.first > 0 && r.first < 1) {
        double dist = fabs(r.second) * (double)norm.size();
        dist *= dist;
        ddmn = min(ddmn, dist);
      }
    }
  }
  printf("%.15f\n", M_PI * (ddmx - ddmn));
  return 0;
}
