#include <bits/stdc++.h>
using namespace std;
long long int num[100005];
long long int seg[400005];
long long int a[100005];
set<long long int> s;
set<long long int>::iterator it;
long long int get_ans(int x, int y, int l, int r, int ind) {
  if (x > y || y < l || r < x) return 0;
  if (x <= l && r <= y) return seg[ind];
  int m = (l + r) / 2;
  int p = 2 * ind + 1;
  int q = p + 1;
  return max(get_ans(x, y, l, m, p), get_ans(x, y, m + 1, r, q));
}
void update(int x, long long int val, int l, int r, int ind) {
  if (l <= x && x <= r) {
    if (l == r) {
      seg[ind] = max(seg[ind], val);
      return;
    }
    int m = (l + r) / 2;
    int p = 2 * ind + 1;
    int q = p + 1;
    update(x, val, l, m, p);
    update(x, val, m + 1, r, q);
    seg[ind] = max(seg[p], seg[q]);
  }
}
int main() {
  int n, i, r, h;
  scanf("%d", &n);
  for (i = 0; i < n; ++i) {
    scanf("%d", &r);
    scanf("%d", &h);
    a[i] = r * 1LL * r * h;
    s.insert(a[i]);
  }
  map<long long int, int> m;
  i = 0;
  long long int tmp, ans = 0;
  for (it = s.begin(); it != s.end(); ++it) {
    m[*it] = i;
    num[i] = *it;
    ++i;
  }
  for (i = 0; i < n; ++i) {
    tmp = m[a[i]];
    ans = a[i] + get_ans(0, tmp - 1, 0, n - 1, 0);
    update(tmp, ans, 0, n - 1, 0);
  }
  double A = acos(-1) * seg[0];
  printf("%.9lf\n", A);
  return 0;
}
