#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
const long long n_ = 1e5 + 1000;
const long double PI = acos(-1.0);
long long gcd(long long a, long long b) { return (a ? gcd(b % a, a) : b); }
long long power(long long a, long long n) {
  long long p = 1;
  while (n > 0) {
    if (n % 2) {
      p = p * a;
    }
    n >>= 1;
    a *= a;
  }
  return p;
}
long long power(long long a, long long n, long long mod) {
  long long p = 1;
  while (n > 0) {
    if (n % 2) {
      p = p * a;
      p %= mod;
    }
    n >>= 1;
    a *= a;
    a %= mod;
  }
  return p % mod;
}
class UnionFind {
 private:
  vector<long long> p, rank, setSize;
  long long numSets;

 public:
  UnionFind(long long N) {
    setSize.assign(N, 1);
    numSets = N;
    rank.assign(N, 0);
    p.assign(N, 0);
    for (long long i = 0; i < N; i++) p[i] = i;
  }
  long long findSet(long long i) {
    return (p[i] == i) ? i : (p[i] = findSet(p[i]));
  }
  bool isSameSet(long long i, long long j) { return findSet(i) == findSet(j); }
  void unionSet(long long i, long long j) {
    if (!isSameSet(i, j)) {
      numSets--;
      long long x = findSet(i), y = findSet(j);
      if (rank[x] > rank[y]) {
        p[y] = x;
        setSize[x] += setSize[y];
      } else {
        p[x] = y;
        setSize[y] += setSize[x];
        if (rank[x] == rank[y]) rank[y]++;
      }
    }
  }
  long long numDisjointSets() { return numSets; }
  long long sizeOfSet(long long i) { return setSize[findSet(i)]; }
};
long long a[3000005];
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long n, s, x;
  cin >> n;
  vector<long long> v[n];
  for (long long i = 0; i < n; i++) {
    cin >> s;
    for (long long j = 0; j < s; j++) {
      cin >> x;
      v[i].push_back(x);
    }
  }
  long long a = 0, b = 0;
  vector<long long> c;
  for (long long i = 0; i < n; i++) {
    long long l = v[i].size();
    if (l % 2) {
      for (long long j = 0; j < l; j++) {
        if (j < l / 2)
          a += v[i][j];
        else if (j > l / 2)
          b += v[i][j];
        else
          c.push_back(v[i][j]);
      }
    } else {
      for (long long j = 0; j < l; j++) {
        if (j < l / 2)
          a += v[i][j];
        else
          b += v[i][j];
      }
    }
  }
  sort(c.rbegin(), c.rend());
  for (long long i = 0; i < c.size(); i++) {
    if (i % 2 == 0)
      a += c[i];
    else
      b += c[i];
  }
  cout << a << " " << b;
  return 0;
}
