정점 V개와 간선 E개로 이루어진 무방향 그래프 G가 있다. 각 정점에 0 이상 X 미만의 정수를 하나씩 붙이되, 한 간선의 두 끝점에는 서로 다른 수가 붙어야 한다. 이 수를 색이라고 부른다.
조건을 만족하는 색칠은 여러 가지이므로, 답은 아래 절차가 만드는 색칠 하나로 정한다. 절차는 정점을 0번부터 V−1번까지 차례로 보면서, 이미 색이 정해진 이웃이 쓰지 않은 색 중 가장 작은 색을 그 정점에 붙인다. 절차는 실행하는 동안 counter 변수를 아래와 같이 늘린다.
counter = 0
color[0..V-1] = -1
for i = 0 to V-1:
used = empty set
for each j in adj[i]:
counter = counter + 1
if color[j] != -1:
add color[j] to used
for c = 0 to V-1:
counter = counter + 1
if c is not in used:
color[i] = c
break
adj[i]는 정점 i와 간선으로 이어진 정점의 목록이다. 이웃을 정확히 한 번씩 세므로 목록의 순서는 색칠 결과도, counter의 최종 값도 바꾸지 않는다. X는 절차가 쓴 색의 개수, 곧 color 값의 최댓값에 1을 더한 값이다.
첫째 줄에 V와 E가 공백으로 구분되어 주어진다. 다음 E개 줄에는 간선의 두 끝점을 나타내는 a와 b가 주어진다.
첫째 줄에 X를 출력한다. 둘째 줄에는 0번 정점부터 V−1번 정점에 붙인 색을 공백 하나로 구분해 출력한다. 셋째 줄에는 The value of counter is: 다음에 공백 하나를 두고 counter의 최종 값을 출력한다.