import java.util.Scanner;

import static java.lang.Long.max;
import static java.lang.Long.min;

public class Fences {
    long x1s[];
    long y1s[];
    long x2s[];
    long y2s[];
    boolean intersections[][];
    boolean visited[];

    public static void main(String[] args) {
        Fences f = new Fences();
        f.solve();
    }

    int sgn(long i) {
        return (i > 0) ? 1 : ((i < 0) ? -1 : 0);
    }

    int direction(long x1, long y1, long x2, long y2, long x3, long y3) {
        return sgn((x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1));
    }

    boolean onSegment(long x1, long y1, long x2, long y2, long x3, long y3) {
        return (min(x1, x2) <= x3 && max(x1, x2) >= x3 && min(y1, y2) <= y3 && max(y1, y2) >= y3);
    }

    boolean intersect(int i, int j) {
        int d1 = direction(x1s[j], y1s[j], x2s[j], y2s[j], x1s[i], y1s[i]);
        int d2 = direction(x1s[j], y1s[j], x2s[j], y2s[j], x2s[i], y2s[i]);
        int d3 = direction(x1s[i], y1s[i], x2s[i], y2s[i], x1s[j], y1s[j]);
        int d4 = direction(x1s[i], y1s[i], x2s[i], y2s[i], x2s[j], y2s[j]);

        if (d1 * d2 < 0 && d3 * d4 < 0) return true;
        if (d1 == 0 && onSegment(x1s[j], y1s[j], x2s[j], y2s[j], x1s[i], y1s[i])) return true;
        if (d2 == 0 && onSegment(x1s[j], y1s[j], x2s[j], y2s[j], x2s[i], y2s[i])) return true;
        if (d3 == 0 && onSegment(x1s[i], y1s[i], x2s[i], y2s[i], x1s[j], y1s[j])) return true;
        if (d4 == 0 && onSegment(x1s[i], y1s[i], x2s[i], y2s[i], x2s[j], y2s[j])) return true;
        return false;
    }

    void visit(int i) {
        visited[i] = true;
        for (int j = 0; j < intersections[i].length; j++) {
            if (!visited[j] && intersections[i][j]) {
                visit(j);
            }
        }
    }

    private void solve() {
        Scanner s = new Scanner(System.in);

        long n = s.nextLong();
        x1s = new long[(int) n];
        y1s = new long[(int) n];
        x2s = new long[(int) n];
        y2s = new long[(int) n];
        intersections = new boolean[(int) n][(int) n];
        visited = new boolean[(int) n];

        long solution = -n;

        for (int i = 0; i < n; i++) {
            x1s[i] = s.nextLong();
            y1s[i] = s.nextLong();
            x2s[i] = s.nextLong();
            y2s[i] = s.nextLong();

            visited[i] = false;

            for (int j = 0; j < i; j++) {
                intersections[i][j] = intersections[j][i] = intersect(i, j);
                if (intersections[i][j]) {
                    solution++;
                }
            }

        }

        for (int i = 0; i < n; i++) {
            if (!visited[i]) {
                solution++;
                visit(i);
            }
        }

        System.out.println(solution);
    }
}
