만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

쥐의 보물

시간 제한2초메모리 제한512 MB

요약
직사각형 장애물이 주어질 때, 장애물에 부딪히면 왼쪽으로 꺾는 쥐가 무한 루프에 들어간 뒤 처음 꺾는 지점의 개수를 구합니다.
난이도

어려움10점 중 8점

유형
기하, 시뮬레이션, 그래프, 정렬
정답자
아직 제출이 없습니다

문제

들판에 쥐 한 마리와 고양이 한 마리가 살고 있었다. 쥐는 고양이가 아끼던 말린 생선을 훔쳤다. 도둑질은 얼마 지나지 않아 발각되었다. 쥐는 말린 생선을 들고 고양이에게 쫓기며 달리기 시작했다.

들판에는 직사각형 장애물이 여러 개 있었다. 쥐는 갈 수 있는 한 항상 직진했지만, 이 장애물을 뛰어넘거나 통과할 수는 없었다. 장애물에 가로막히면 왼쪽으로 돌아서 앞으로 나아갈 수 있는 방향으로 가고, 그 방향으로 다시 달렸다. 모서리에서는 방향을 바꾸지 않고 계속 나아갈 수도 있다는 점에 유의하라.

쥐는 쫓기는 동안 같은 지점을 계속 다시 지나간다는 것을 알아챘다. 그래서 그 시점 이후에 처음으로 장애물에 두 번째로 가로막힌 지점에 말린 생선을 숨기기로 했다. 달리 말하면, 무한 루프에 들어간 뒤 처음으로 방향을 트는 지점에 숨기기로 한 것이다. 추격이 끝나면 그곳으로 다시 올 수 있다고 생각했다.

예를 들어 아래 그림에서 쥐는 먼저 파란 선을 따라 가다가 B 지점에서 왼쪽으로 돌았다. 그 뒤 빨간 선을 따라 반시계 방향으로 움직여 무한 루프에 들어갔다. 이 경우 쥐는 말린 생선을 B 지점이 아니라 A 지점에 숨겼다. 선 C 위의 B 지점에 두 번째로 도달했을 때는 그냥 지나치고 돌지 않았기 때문이다.

말린 생선을 숨기는 지점의 예

결국 고양이는 떠났지만, 쥐는 숨기려고 생각한 지점도, 실제로 숨긴 지점도 기억하지 못했다. 쥐는 자기 말린 생선을 잃어버린 것이다.

당신은 쥐의 친구이자 실력 있는 프로그래머이다. 장애물 정보가 주어졌을 때, 쥐가 말린 생선을 숨겼을 수 있는 지점의 개수를 세는 프로그램을 작성하라. 쥐는 하나의 점으로 취급한다.

입력

첫 줄에 장애물의 개수 NN (4≤N≤400004 \le N \le 40000)이 주어진다. 이어지는 NN개의 줄에는 장애물을 나타내는 정수 Xi,1X_{i,1}, Yi,1Y_{i,1}, Xi,2X_{i,2}, Yi,2Y_{i,2} 네 개가 한 줄에 하나씩 주어진다 (−100000000≤Xi,1,Yi,1,Xi,2,Yi,2≤100000000-100000000 \le X_{i,1}, Y_{i,1}, X_{i,2}, Y_{i,2} \le 100000000). (Xi,1,Yi,1)(X_{i,1}, Y_{i,1})은 장애물의 왼쪽 아래 꼭짓점, (Xi,2,Yi,2)(X_{i,2}, Y_{i,2})는 오른쪽 위 꼭짓점의 좌표이다. X축은 오른쪽, Y축은 위쪽 방향이다. 어떤 두 장애물도 겹치지 않는다.

출력

쥐가 말린 생선을 숨겼을 수 있는 지점의 개수를 출력한다. 이 값은 0이 아님이 보장된다.

예제2

  1. 예제 1

    입력
    4
    0 0 2 1
    3 0 4 2
    0 2 1 4
    2 3 4 4
    
    예상 출력
    4
    
  2. 예제 2

    입력
    8
    0 0 2 1
    2 2 4 3
    5 3 7 4
    7 5 9 6
    0 2 1 4
    2 4 3 6
    6 0 7 2
    8 2 9 4
    
    예상 출력
    8