만드는 중입니다

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

한 걸음 더

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

요약
직사각형 q개로 만들어진 n×m 표에서, 각 + 칸의 행과 열을 뒤집는 과정을 반복하면 모든 칸이 -가 되는지 판단하고 조작 횟수를 구합니다.
난이도

어려움10점 중 8점

유형
수학, 비트 연산, 구현
정답자
아직 제출이 없습니다

문제

n×mn \times m 크기의 표가 있고, 각 칸에는 "+" 또는 "-" 문자가 들어 있다. 연산 하나는 칸 하나를 골라 그 칸이 속한 행과 열의 모든 문자를 동시에 뒤집는 것이다. 선택한 칸 자체도 뒤집힌다. 문자를 뒤집는다는 것은 "+"를 "-"로, "-"를 "+"로 바꾸는 것이다.

바샤는 모든 칸을 "-"로 채우고 싶어 한다. 그는 다음 알고리즘을 사용한다.

  1. 모든 칸이 "-"이면 알고리즘을 끝낸다.
  2. 그렇지 않으면 현재 "+"인 칸의 위치 (r1,c1),…,(rk,ck)(r_1, c_1), \ldots, (r_k, c_k)를 기록한다. 그다음 각 칸 (ri,ci)(r_i, c_i)에 대해 연산을 한 번씩 수행하고 1번으로 돌아간다.

사샤는 바샤가 목표를 달성할 수 있는지 알고 싶어 한다. 달성할 수 있다면, 알고리즘이 끝날 때까지 바샤가 수행하는 연산의 총 횟수도 알고 싶어 한다.

입력

첫 줄에 세 정수 nn, mm, qq (1≤n,m≤1051 \le n, m \le 10^5, 0≤q≤1050 \le q \le 10^5)가 주어진다.

이어지는 qq개의 줄에는 네 정수 xi,1x_{i,1}, yi,1y_{i,1}, xi,2x_{i,2}, yi,2y_{i,2} (1≤xi,1≤xi,2≤n1\le x_{i,1} \le x_{i,2} \le n, 1≤yi,1≤yi,2≤m1 \le y_{i,1} \le y_{i,2} \le m)가 주어진다. 이는 xi,1≤x≤xi,2x_{i,1} \le x \le x_{i,2}이고 yi,1≤y≤yi,2y_{i,1} \le y \le y_{i,2}인 모든 칸 (x,y)(x, y)를 포함하는 직사각형을 나타낸다. 칸이 홀수 개의 직사각형에 포함될 때에만 처음에 "+"이다.

출력

바샤가 끝내지 못하면 "-1"을 출력한다. 그렇지 않으면 바샤가 수행하는 연산의 횟수를 출력한다.

힌트

첫 번째 예시에서 표의 초기 상태는 다음과 같다.

++-
+-+
-++

여섯 번의 연산으로 이루어진 알고리즘을 한 번 반복하면 표가 모두 "-"로 채워진다.

두 번째 예시에서 표는 다음과 같으며, 알고리즘을 반복할 때마다 그대로 유지된다.

-++
+--
+--

예제2

  1. 예제 1

    입력
    3 3 2
    1 1 2 2
    2 2 3 3
    
    예상 출력
    6
    
  2. 예제 2

    입력
    3 3 2
    1 2 1 3
    2 1 3 1
    
    예상 출력
    -1