#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 100;
const long double EPS = 1e-9;
const long long int mod = 1e9 + 7;
const long long int inf = 1e16;
long double seg[N * 4], mx[N];
vector<pair<long double, int>> v;
int n;
long double pi = 2 * acos(0.0);
long double get(int l, int r, int b = 0, int e = n, int ind = 1) {
  if (l <= b && r >= e) return seg[ind];
  int mid = (b + e) / 2;
  long double res = 0;
  if (l < mid) res = max(res, get(l, r, b, mid, ind * 2));
  if (r > mid) res = max(res, get(l, r, mid, e, ind * 2 + 1));
  return res;
}
void add(int x, int b = 0, int e = n, int ind = 1) {
  seg[ind] = max(seg[ind], mx[x]);
  if (b + 1 == e) return;
  int mid = (b + e) / 2;
  if (v[x].second < mid)
    add(x, b, mid, ind * 2);
  else
    add(x, mid, e, ind * 2 + 1);
  return;
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cout << fixed << setprecision(6);
  cin >> n;
  for (int i = 0; i < n; i++) {
    long double r, h;
    cin >> r >> h;
    long double vol = h * r * r * pi;
    v.push_back({vol, i});
  }
  sort(v.begin(), v.end());
  long double ans = 0;
  int i = 0;
  while (i < n) {
    int j = i;
    while (j < n && v[j].first - v[i].first <= EPS) {
      mx[j] = v[j].first;
      if (v[j].second != 0) mx[j] += get(0, v[j].second);
      ans = max(ans, mx[j]);
      j++;
    }
    while (i < j) {
      add(i);
      i++;
    }
  }
  cout << ans << endl;
  return 0;
}
