#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 50;
double maxi[N];
pair<double, int> cake[N];
int ind[N];
void update(int ind, double v) {
  for (; ind < N; ind += (ind) & (-ind)) maxi[ind] = max(maxi[ind], v);
}
double get(int ind) {
  --ind;
  double ret = 0;
  while (ind != 0) {
    ret = max(ret, maxi[ind]);
    ind = ind & (ind - 1);
  }
  return ret;
}
double vol[N];
const double pi = 2 * acos(0);
int main() {
  int n, i, j, k;
  double r, h, ret = 0;
  cin >> n;
  for (i = 1; i <= n; ++i) {
    scanf("%lf%lf", &r, &h);
    cake[i] = make_pair(r * r * h, i);
    vol[i] = r * r * h;
  }
  for (i = 0; i < N; ++i) maxi[i] = 0;
  sort(cake + 1, cake + 1 + n);
  for (i = 1; i <= n; ++i) {
    ind[cake[i].second] = n - i + 1;
    if (cake[i].first == cake[i - 1].first)
      ind[cake[i].second] = ind[cake[i - 1].second];
  }
  for (i = n; i >= 1; --i) {
    int index = ind[i];
    double u = get(index);
    u += vol[i];
    ret = max(ret, u);
    update(index, u);
  }
  printf("%0.9lf\n", ret * pi);
}
