#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long lcm(long long a, long long b) { return a * (b / gcd(a, b)); }
int width[200005];
int height[200005];
int sum, aux, n;
struct STree {
  vector<int> st;
  int n;
  STree(int n) : st(4 * n + 5, ((long long)-1e9)), n(n) {}
  void init(int k, int s, int e, int *a) {
    if (s + 1 == e) {
      st[k] = a[s];
      return;
    }
    int m = (s + e) / 2;
    init(2 * k, s, m, a);
    init(2 * k + 1, m, e, a);
    st[k] = max(st[2 * k], st[2 * k + 1]);
  }
  void upd(int k, int s, int e, int p, int v) {
    if (s + 1 == e) {
      st[k] = v;
      return;
    }
    int m = (s + e) / 2;
    if (p < m)
      upd(2 * k, s, m, p, v);
    else
      upd(2 * k + 1, m, e, p, v);
    st[k] = max(st[2 * k], st[2 * k + 1]);
  }
  int query(int k, int s, int e, int a, int b) {
    if (s >= b || e <= a) return ((long long)-1e9);
    if (s >= a && e <= b) return st[k];
    int m = (s + e) / 2;
    return max(query(2 * k, s, m, a, b), query(2 * k + 1, m, e, a, b));
  }
  void init(int *a) { init(1, 0, n, a); }
  void upd(int p, int v) { upd(1, 0, n, p, v); }
  int query(int a, int b) { return query(1, 0, n, a, b); }
};
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  STree st(n);
  for (int i = 0; i < n; i++) {
    cin >> width[i] >> height[i];
    sum += width[i];
  }
  st.init(height);
  for (int i = 0; i < n; i++) {
    aux = height[i];
    st.upd(i, 0);
    cout << (sum - width[i]) * (st.query(0, n)) << " ";
    st.upd(i, aux);
  }
}
