import java.util.*;

public class Euler165 {
    public static void main(String[] args) {
        int[] s = new int[20001];
        s[0] = 290797;
        for (int i = 1; i <= 20000; i++)
            s[i] = (int) ((long) s[i - 1] * s[i - 1] % 50515093);
        int[] t = new int[20000];
        for (int i = 0; i < 20000; i++)
            t[i] = s[i + 1] % 500;
        int[][] segs = new int[5000][4];
        for (int n = 0; n < 5000; n++) {
            segs[n][0] = t[4 * n];
            segs[n][1] = t[4 * n + 1];
            segs[n][2] = t[4 * n + 2];
            segs[n][3] = t[4 * n + 3];
        }
        Set<Long> pts = new HashSet<>();
        for (int i = 0; i < 5000; i++) {
            long x1 = segs[i][0], y1 = segs[i][1], x2 = segs[i][2], y2 = segs[i][3];
            long dx1 = x2 - x1, dy1 = y2 - y1;
            for (int j = i + 1; j < 5000; j++) {
                long x3 = segs[j][0], y3 = segs[j][1], x4 = segs[j][2], y4 = segs[j][3];
                long dx2 = x4 - x3, dy2 = y4 - y3;
                long denom = dx1 * dy2 - dy1 * dx2;
                if (denom == 0)
                    continue;
                long tn = (x3 - x1) * dy2 - (y3 - y1) * dx2;
                long un = (x3 - x1) * dy1 - (y3 - y1) * dx1;
                if (denom > 0) {
                    if (tn <= 0 || tn >= denom || un <= 0 || un >= denom)
                        continue;
                } else {
                    if (tn >= 0 || tn <= denom || un >= 0 || un <= denom)
                        continue;
                }
                // Exact point: reduce fraction
                long pxN = x1 * denom + tn * dx1, pxD = denom;
                long pyN = y1 * denom + tn * dy1, pyD = denom;
                long g1 = gcd(Math.abs(pxN), Math.abs(pxD));
                pxN /= g1;
                pxD /= g1;
                long g2 = gcd(Math.abs(pyN), Math.abs(pyD));
                pyN /= g2;
                pyD /= g2;
                if (pxD < 0) {
                    pxN = -pxN;
                    pxD = -pxD;
                }
                if (pyD < 0) {
                    pyN = -pyN;
                    pyD = -pyD;
                }
                // Encode as unique key
                pts.add(hash4(pxN, pxD, pyN, pyD));
            }
        }
        System.out.println(pts.size());
    }

    static long gcd(long a, long b) {
        while (b != 0) {
            long t = b;
            b = a % b;
            a = t;
        }
        return a;
    }

    static long hash4(long a, long b, long c, long d) {
        return ((a * 1000003 + b) * 1000003 + c) * 1000003 + d;
    }
}
