#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 2510;
//查找a中有多少target
int calcu(long long a[], int n, long long target) {
if (a[0] > target || a[n - 1] < target) return 0;
//查找下界
int l = 0, r = n - 1;
while (r > l) {
int mid = (r - l) / 2 + l;
if (a[mid] >= target) r = mid;
else l = mid + 1;
}
int down = l;
if (a[down] != target) return 0;
if (a[n - 1] == target) {
return n - down;
} else {
l = 0, r = n - 1;
while (r > l) {
int mid = (r - l) / 2 + l;
if (a[mid] <= target) l = mid + 1;
else r = mid;
}
return l - down;
}
}
int main() {
int n;
cin >> n;
// vector<vector<ll> > a(n, vector<ll>(4));
ll** a = new ll*[n + 1];
for (int i = 0; i < n; i++) {
a[i] = new ll[4];
cin >> a[i][0] >> a[i][1] >> a[i][2] >> a[i][3];
}
ll** processed = new ll*[2];
processed[0] = new ll[N * N];
processed[1] = new ll[N * N];
int cnt = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
// processed[cnt] = new ll[2];
processed[0][cnt] = a[i][0] + a[j][1];
processed[1][cnt++] = (a[i][2] + a[j][3]) * -1;
}
}
sort(processed[1], processed[1] + cnt);
long long ans = 0;
for (int i = 0; i < cnt; i++) {
//二分查找上下界
ans += calcu(processed[1], cnt, processed[0][i]);
}
cout << ans << endl;
}