Три цвета

시간 제한4초메모리 제한1024 MB

요약
이분 그래프의 각 간선을 0, 1, 2 색으로 칠해 인접한 두 정점의 간선 색 합이 다르도록 만들고, 불가능하면 -1을 출력한다.
난이도

어려움10점 중 8점

유형
그래프, 수학, 그리디, 구현
정답자
아직 제출이 없습니다

문제

Число три в информатике играет ключевую роль. Часто некоторые задачи легко решаются, если некоторый параметр в задаче равен двум или одному, но становятся сложными, если этот параметр равен трем. Например, задача о раскраске графа в два цвета --- это проверка на двудольность, а раскраска в три цвета --- трудная задача.

Мы решили, что это нечестно и придумали задачу, которая легко решается для трех цветов, но гораздо труднее для двух.

Рассмотрим двудольный граф GG, разрешим раскрашивать его ребра в три цвета: 0, 1 и 2. Будем обозначать сумму цветов ребер, один из концов которых равен uu, как s(u)s(u). Будем называть такую раскраску различающей соседей, если для любых двух вершин uu и vv, соединенных ребром, выполнено неравенство s(u)≠s(v)s(u) \ne s(v).

По заданному двудольному графу GG найдите его раскраску в три цвета, различающую соседей.

입력

Первая строка входного файла содержит три целых числа n_1n\_1, n_2n\_2 и mm --- количество вершин в каждой из долей и количество ребер в графе, соответственно (1≤n_1,n_2≤15001 \le n\_1, n\_2 \le 1500, 1≤m≤100001 \le m \le 10000).

Следующие mm строк описывают ребра, каждое ребро описывается двумя целыми числами --- номерами вершин, которые оно соединяет. Вершины в каждой доле независимо нумеруются, начиная с единицы.

출력

Если решения не существует, выведите <<−1-1>>.

Иначе выведите mm целых чисел --- цвета ребер. Выводите цвета ребер в порядке, в котором ребра заданы во входном файле.

예제1

  1. 예제 1

    입력
    3 3 7
    1 1
    1 2
    1 3
    2 2
    3 1
    3 2
    3 3
    
    예상 출력
    0 0 0 1 2 2 2