#include <bits/stdc++.h>
using namespace std;
const long double pi = 3.14159265358979323;
long long r[100007], h[100007], v[100007];
long long t[400200];
vector<pair<long long, int> > vec;
long long get_max(int v, int tl, int tr, int l, int r) {
  if (l > r) return 0;
  if (l == tl && r == tr) return t[v];
  int tm = (tl + tr) / 2;
  return max(get_max(v * 2, tl, tm, l, min(r, tm)),
             get_max(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
}
void update(int v, int tl, int tr, int pos, long long val) {
  if (tl == tr)
    t[v] = max(t[v], val);
  else {
    int tm = (tl + tr) / 2;
    if (pos <= tm)
      update(v * 2, tl, tm, pos, val);
    else
      update(v * 2 + 1, tm + 1, tr, pos, val);
    t[v] = max(t[v * 2], t[v * 2 + 1]);
  }
}
int main() {
  int n;
  cin >> n;
  for (int i = 1; i <= n; ++i) cin >> r[i] >> h[i];
  for (int i = 1; i <= n; ++i) {
    v[i] = r[i] * r[i] * h[i];
    vec.push_back(make_pair(v[i], -(i + 1)));
  }
  sort(vec.begin(), vec.end());
  long long ans = 0, temp;
  for (int i = 0; i < n; ++i) {
    temp = get_max(1, 0, 100002, 0, -vec[i].second - 1) + vec[i].first;
    update(1, 0, 100002, -vec[i].second, temp);
    ans = max(ans, temp);
  }
  cout.precision(20);
  cout << (long double)ans * pi;
  return 0;
}
