#include <bits/stdc++.h>
typedef struct mazo {
  struct mazo* sigmazo;
  int dato;
  struct mazo* sigcarta;
  struct mazo* antcarta;
} CARTAS;
CARTAS* crearMazo(int, long int*, long int*);
void eliminar(CARTAS*);
int main() {
  long int sumPar = 0, sumImpar = 0;
  int mazos, i, sum = 0, mayor, menor, cartas;
  CARTAS *cabeza, *ptr, *ptrcartas, *nodoeliminar, *mazo;
  scanf("%d", &mazos);
  for (i = 0; i < mazos; i++) {
    scanf("%d", &cartas);
    sum += cartas;
    if (i == 0) {
      cabeza = crearMazo(cartas, &sumPar, &sumImpar);
      ptr = cabeza;
    } else {
      ptr->sigmazo = crearMazo(cartas, &sumPar, &sumImpar);
      ptr = ptr->sigmazo;
    }
  }
  for (i = 0; i < sum; i++) {
    ptr = cabeza;
    mayor = -10;
    if (i % 2 == 0) {
      while (ptr != NULL) {
        if (ptr->dato != 0) {
          if (ptr->sigcarta->dato > mayor) {
            mayor = ptr->sigcarta->dato;
            nodoeliminar = ptr->sigcarta;
            mazo = ptr;
          }
        }
        ptr = ptr->sigmazo;
      }
      if (nodoeliminar != NULL) {
        eliminar(nodoeliminar);
        mazo->dato--;
        sumPar += (long int)mayor;
        nodoeliminar = NULL;
      }
    } else {
      mayor = -10;
      while (ptr != NULL) {
        if (ptr->dato != 0) {
          if (ptr->antcarta->dato > mayor) {
            mayor = ptr->antcarta->dato;
            nodoeliminar = ptr->antcarta;
            mazo = ptr;
          }
        }
        ptr = ptr->sigmazo;
      }
      if (nodoeliminar != NULL) {
        eliminar(nodoeliminar);
        mazo->dato--;
        sumImpar += (long int)mayor;
        nodoeliminar = NULL;
      }
    }
  }
  printf("%ld %ld", sumPar, sumImpar);
  return 0;
}
CARTAS* crearMazo(int cartas, long int* sumPar, long int* sumImpar) {
  CARTAS *cabezamazo, *ptr, *nodo;
  int dato = 0, i;
  cabezamazo = (CARTAS*)malloc(sizeof(CARTAS));
  if (cartas % 2 == 0) {
    cabezamazo->dato = 0;
  } else {
    cabezamazo->dato = 1;
  }
  cabezamazo->antcarta = cabezamazo;
  cabezamazo->sigcarta = cabezamazo;
  ptr = cabezamazo;
  for (i = 0; i < cartas; i++) {
    scanf("%d", &dato);
    if (i < (cartas / 2)) {
      *sumPar += dato;
    } else if (i == (cartas / 2) && cartas % 2 == 1) {
      nodo = (CARTAS*)malloc(sizeof(CARTAS));
      nodo->dato = dato;
      nodo->sigmazo = NULL;
      nodo->sigcarta = cabezamazo;
      nodo->antcarta = ptr;
      cabezamazo->antcarta = nodo;
      ptr->sigcarta = nodo;
      ptr = ptr->sigcarta;
    } else if (i == (cartas / 2) && cartas % 2 == 0) {
      *sumImpar += dato;
    } else if (i > (cartas / 2)) {
      *sumImpar += dato;
    }
  }
  cabezamazo->sigmazo = NULL;
  return cabezamazo;
}
void eliminar(CARTAS* nodo) {
  nodo->antcarta->sigcarta = nodo->sigcarta;
  nodo->sigcarta->antcarta = nodo->antcarta;
  free(nodo);
}
