https://www.acmicpc.net/problem/2457
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
// 꽃을 피는 날 기준 오름차순으로, 같다면 지는 날 내림차순으로 정렬
//      피는 날, 지는 날은 (달 * 100 + 일)로 표현
// 시작 일(3/1)부터 종료 일(11/30까지)까지로 설정해놓고 꽃의 배열을 순환
//  해당 꽃이 시작일보다 이후에 피기 시작한다면 꽃을 피는 날 기준으로 오름차순으로 정렬해놨었는데 시작일 이후에 핀다면 3/1부터 펴야 한다는 조건을 만족하지 못함
//      -> break
//  해당 꽃이 시작일 이전 혹은 그 날 피기 시작하는 꽃들을 순회하면서 그 중 지는 날이 가장 긴 꽃을 찾음
//  새 꽃을 찾았다는 것을 나타내기 위해 boolean 타입을 true로 변경
//      그러다 시작일 이후에 피는 꽃이 등장한다면 break
//  새 꽃을 찾았다면 시작일을 지는 날이 가장 긴 꽃의 지는 날로 변경, 선택된 꽃의 개수를 1 증가
public class Main {
    static int N;
    static Flower[] flowers;
    static void input() {
        Reader scanner = new Reader();
        N = scanner.nextInt();
        flowers = new Flower[N];
        for(int idx = 0; idx < N; idx++) {
            int startMonth = scanner.nextInt(), startDay = scanner.nextInt();
            int endMonth = scanner.nextInt(), endDay = scanner.nextInt();
            int start = startMonth * 100 + startDay;
            int end = endMonth * 100 + endDay;
            flowers[idx] = new Flower(start, end);
        }
    }
    static void solution() {
        Arrays.sort(flowers);
        int start = 301, end = 1201;
        int count = 0, max = 0, index = 0;
        while(start < end) {
            boolean hasNext = false; // 새 꽃 찾은지 여부
            for(int idx = index; idx < N; idx++) {
                // 종료일이 시작일이 이후면 의미 없음. 종료일에는 시작해야 이어지기 때문
                if(flowers[idx].start > start) break;
                if(max < flowers[idx].end) {
                    hasNext = true;
                    max = flowers[idx].end;
                    index = idx + 1;
                }
            }
            if(hasNext) {
                start = max;
                count++;
            } else break;
        }
        if(max < end) System.out.println(0);
        else System.out.println(count);
    }
    static class Flower implements Comparable<Flower> {
        int start, end;
        public Flower(int start, int end) {
            this.start = start;
            this.end = end;
        }
        @Override
        public int compareTo(Flower o) {
            if(start != o.start) return start - o.start;
            return o.end - end;
        }
    }
    public static void main(String[] args) {
        input();
        solution();
    }
    static class Reader {
        BufferedReader br;
        StringTokenizer st;
        public Reader() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }
        String next() {
            while(st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }
        int nextInt() {
            return Integer.parseInt(next());
        }
    }
}