public class Euler150 {
    public static void main(String[] args) {
        int rows = 1000;
        long t = 0;
        int[][] tri = new int[rows][];
        long[][] prefix = new long[rows][];
        for (int i = 0; i < rows; i++) {
            tri[i] = new int[i + 1];
            prefix[i] = new long[i + 2];
            for (int j = 0; j <= i; j++) {
                t = (615949 * t + 797807) & ((1L << 20) - 1);
                tri[i][j] = (int) (t - (1 << 19));
                prefix[i][j + 1] = prefix[i][j] + tri[i][j];
            }
        }
        long best = Long.MAX_VALUE;
        for (int r = 0; r < rows; r++)
            for (int c = 0; c <= r; c++) {
                long s = 0;
                for (int h = 0; r + h < rows; h++) {
                    s += prefix[r + h][c + h + 1] - prefix[r + h][c];
                    if (s < best)
                        best = s;
                }
            }
        System.out.println(best);
    }
}
