#include <bits/stdc++.h>
using namespace std;
int s[10];
struct node {
  int l, r, now, h, a;
} f[10][10];
int i, j, k, l, n, m, x, y, h, a, ans = 100000, ans1;
inline void work(int o) {
  if (o != n && s[n] > ans) return;
  int gt = 0;
  if (o == 1) {
    if (s[o] + s[n] == 0 && s[o] <= 0) {
      int gtw = 0;
      if (s[n] < ans) {
        for (int i = 1; i <= n; i++)
          for (int j = i + 1; j <= n; j++)
            gtw =
                gtw + f[i][j].now * f[i][j].now + (f[i][j].now > 0) * f[i][j].a;
        ans1 = gtw;
        ans = s[n];
      } else if (s[n] == ans) {
        for (int i = 1; i <= n; i++)
          for (int j = i + 1; j <= n; j++)
            gtw =
                gtw + f[i][j].now * f[i][j].now + (f[i][j].now > 0) * f[i][j].a;
        ans1 = max(ans1, gtw);
      }
    }
    return;
  }
  for (int i = 1; i < o; i++) {
    if (s[o] > 0) {
      if (o == 2) {
        for (int gt = 0; gt <= s[o]; gt++) {
          if (gt > f[1][o].now - f[1][o].l) break;
          s[o] = s[o] - gt;
          s[1] = s[1] + gt;
          f[1][o].now -= gt;
          if (s[o] == 0 || o == n) work(o - 1);
          s[o] += gt;
          f[1][o].now += gt;
          s[1] -= gt;
        }
      } else if (o == 3) {
        for (int j = 0; j <= s[o]; j++) {
          if (j > f[1][o].now - f[1][o].l) break;
          for (int gt = 0; gt <= s[o] - j; gt++) {
            if (gt > f[2][o].now - f[2][o].l) break;
            s[o] = s[o] - j - gt;
            s[1] = s[1] + j;
            s[2] = s[2] + gt;
            f[1][o].now -= j;
            f[2][o].now -= gt;
            if (s[o] == 0 || o == n) work(o - 1);
            s[o] = s[o] + gt + j;
            s[1] -= j;
            s[2] -= gt;
            f[1][o].now += j;
            f[2][o].now += gt;
          }
        }
      } else if (o == 4) {
        for (int j = 0; j <= s[o]; j++) {
          if (j > f[1][o].now - f[1][o].l) break;
          for (int k = 0; k <= s[o] - j; k++) {
            if (k > f[2][o].now - f[2][o].l) break;
            for (int gt = 0; gt <= s[o] - j - k; gt++) {
              if (gt > f[3][o].now - f[3][o].l) break;
              s[o] = s[o] - j - k - gt;
              s[1] += j;
              s[2] += k;
              s[3] += gt;
              f[1][o].now -= j;
              f[2][o].now -= k;
              f[3][o].now -= gt;
              if (s[o] == 0 || o == n) work(o - 1);
              s[o] = s[o] + j + k + gt;
              s[1] -= j;
              s[2] -= k;
              s[3] -= gt;
              f[1][o].now += j;
              f[2][o].now += k;
              f[3][o].now += gt;
            }
          }
        }
      }
      if (o == 5) {
        for (int j = 0; j <= s[o]; j++) {
          if (j > f[1][o].now - f[1][o].l) break;
          for (int k = 0; k <= s[o] - j; k++) {
            if (k > f[2][o].now - f[2][o].l) break;
            for (int l = 0; l <= s[o] - j - k; l++) {
              for (int gt = 0; gt <= s[o] - j - k - l; gt++) {
                if (l > f[3][o].now - f[3][o].l) break;
                if (gt > f[4][o].now - f[4][o].l) break;
                s[o] = s[o] - j - k - gt - l;
                s[1] += j;
                s[2] += k;
                s[3] += l;
                s[4] += gt;
                f[1][o].now -= j;
                f[2][o].now -= k;
                f[3][o].now -= l;
                f[4][o].now -= gt;
                if (s[o] == 0 || o == n) work(o - 1);
                s[o] = s[o] + j + k + gt + l;
                s[1] -= j;
                s[2] -= k;
                s[3] -= l;
                s[4] -= gt;
                f[1][o].now += j;
                f[2][o].now += k;
                f[3][o].now += l;
                f[4][o].now += gt;
              }
            }
          }
        }
      }
      if (o == 6) {
        for (int j = 0; j <= s[o]; j++) {
          if (j > f[1][o].now - f[1][o].l) break;
          for (int k = 0; k <= s[o] - j; k++) {
            if (k > f[2][o].now - f[2][o].l) break;
            for (int l = 0; l <= s[o] - j - k; l++) {
              if (l > f[3][o].now - f[3][o].l) break;
              for (int q = 0; q <= s[o] - j - k - l; q++) {
                if (q > f[4][o].now - f[4][o].l) break;
                for (int gt = 0; gt <= s[o] - j - k - l - q; gt++) {
                  if (gt > f[5][o].now - f[5][o].l) break;
                  s[o] = s[o] - j - k - gt - l - q;
                  s[1] += j;
                  s[2] += k;
                  s[3] += l;
                  s[4] += q;
                  s[5] += gt;
                  f[1][o].now -= j;
                  f[2][o].now -= k;
                  f[3][o].now -= l;
                  f[4][o].now -= q;
                  f[5][o].now -= gt;
                  if (s[o] == 0 || o == n) work(o - 1);
                  s[o] = s[o] + j + k + gt + l + q;
                  s[1] -= j;
                  s[2] -= k;
                  s[3] -= l;
                  s[4] -= q;
                  s[5] -= gt;
                  f[1][o].now += j;
                  f[2][o].now += k;
                  f[3][o].now += l;
                  f[4][o].now += q;
                  f[5][o].now += gt;
                }
              }
            }
          }
        }
      }
    } else {
      if (o == 2) {
        for (int gt = 0; gt <= s[o]; gt++) {
          if (gt > f[1][o].r - f[1][o].now) break;
          s[o] = s[o] + gt;
          s[1] = s[1] - gt;
          f[1][o].now += gt;
          if (s[o] == 0 || o == n) work(o - 1);
          s[o] -= gt;
          s[1] += gt;
          f[1][o].now -= gt;
        }
      } else if (o == 3) {
        for (int j = 0; j <= s[o]; j++) {
          if (j > f[1][o].r - f[1][o].now) break;
          for (int gt = 0; gt <= s[o] - j; gt++) {
            if (gt > f[2][o].r - f[2][o].now) break;
            s[o] = s[o] + j + gt;
            s[1] = s[1] - j;
            s[2] = s[2] - gt;
            f[1][o].now += j;
            f[2][o].now += gt;
            if (s[o] == 0 || o == n) work(o - 1);
            s[o] = s[o] - gt - j;
            s[1] += j;
            s[2] += gt;
            f[1][o].now -= j;
            f[2][o].now -= gt;
          }
        }
      } else if (o == 4) {
        for (int j = 0; j <= s[o]; j++) {
          if (j > f[1][o].r - f[1][o].now) break;
          for (int k = 0; k <= s[o] - j; k++) {
            if (k > f[2][o].r - f[2][o].now) break;
            for (int gt = 0; gt <= s[o] - j - k; gt++) {
              if (gt > f[3][o].r - f[3][o].now) break;
              s[o] = s[o] + j + k + gt;
              s[1] -= j;
              s[2] -= k;
              s[3] -= gt;
              f[1][o].now += j;
              f[2][o].now += k;
              f[3][o].now += gt;
              if (s[o] == 0 || o == n) work(o - 1);
              s[o] = s[o] - j - k - gt;
              s[1] += j;
              s[2] += k;
              s[3] += gt;
              f[1][o].now -= j;
              f[2][o].now -= k;
              f[3][o].now -= gt;
            }
          }
        }
      }
      if (o == 5) {
        for (int j = 0; j <= s[o]; j++) {
          if (j > f[1][o].r - f[1][o].now) break;
          for (int k = 0; k <= s[o] - j; k++) {
            if (k > f[2][o].r - f[2][o].now) break;
            for (int l = 0; l <= s[o] - j - k; l++) {
              if (l > f[3][o].r - f[3][o].now) break;
              for (int gt = 0; gt <= s[o] - j - k - l; gt++) {
                if (gt > f[4][o].r - f[4][o].now) break;
                s[o] = s[o] + j + k + gt + l;
                s[1] -= j;
                s[2] -= k;
                s[3] -= l;
                s[4] -= gt;
                f[1][o].now += j;
                f[2][o].now += k;
                f[3][o].now += l;
                f[4][o].now += gt;
                if (s[o] == 0 || o == n) work(o - 1);
                s[o] = s[o] - j - k - gt - l;
                s[1] += j;
                s[2] += k;
                s[3] += l;
                s[4] += gt;
                f[1][o].now -= j;
                f[2][o].now -= k;
                f[3][o].now -= l;
                f[4][o].now -= gt;
              }
            }
          }
        }
      }
      if (o == 6) {
        for (int j = 0; j <= s[o]; j++) {
          if (j > f[1][o].r - f[1][o].now) break;
          for (int k = 0; k <= s[o] - j; k++) {
            if (k > f[2][o].r - f[2][o].now) break;
            for (int l = 0; l <= s[o] - j - k; l++) {
              if (l > f[3][o].r - f[3][o].now) break;
              for (int q = 0; q <= s[o] - j - k - l; q++) {
                if (q > f[4][o].r - f[4][o].now) break;
                for (int gt = 0; gt <= s[o] - j - k - l - q; gt++) {
                  if (gt > f[5][o].r - f[5][o].now) break;
                  s[o] = s[o] + j + k + gt + l + q;
                  s[1] -= j;
                  s[2] -= k;
                  s[3] -= l;
                  s[4] -= q;
                  s[5] -= gt;
                  f[1][o].now += j;
                  f[2][o].now += k;
                  f[3][o].now += l;
                  f[4][o].now += q;
                  f[5][o].now += gt;
                  if (s[o] == 0 || o == n) work(o - 1);
                  s[o] = s[o] - j - k - gt - l - q;
                  s[1] += j;
                  s[2] += k;
                  s[3] += l;
                  s[4] += q;
                  s[5] += gt;
                  f[1][o].now -= j;
                  f[2][o].now -= k;
                  f[3][o].now -= l;
                  f[4][o].now -= q;
                  f[5][o].now -= gt;
                }
              }
            }
          }
        }
      }
    }
  }
}
int main() {
  scanf("%d", &n);
  m = n * (n - 1) / 2;
  for (i = 1; i <= m; i++) {
    scanf("%d%d%d%d%d", &x, &y, &l, &h, &a);
    f[x][y].l = l;
    f[x][y].r = h;
    f[x][y].a = a;
    f[x][y].now = h;
    s[y] += h;
    s[x] -= h;
  }
  work(n);
  if (ans == 100000)
    printf("-1 -1");
  else
    printf("%d %d\n", ans, ans1);
}
