| Task: | Building Teams |
| Sender: | aalto26bm_015 |
| Submission time: | 2026-09-07 17:06:47 +0300 |
| Language: | Python3 (PyPy3) |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.04 s | details |
| #2 | ACCEPTED | 0.04 s | details |
| #3 | ACCEPTED | 0.04 s | details |
| #4 | ACCEPTED | 0.04 s | details |
| #5 | ACCEPTED | 0.04 s | details |
| #6 | ACCEPTED | 0.29 s | details |
| #7 | ACCEPTED | 0.29 s | details |
| #8 | ACCEPTED | 0.29 s | details |
| #9 | ACCEPTED | 0.29 s | details |
| #10 | ACCEPTED | 0.22 s | details |
| #11 | ACCEPTED | 0.04 s | details |
| #12 | ACCEPTED | 0.04 s | details |
Code
# import sys
# from collections import deque
# def solve_teams():
# input_data = sys.stdin.read().split()
# if not input_data:
# return
# n = int(input_data[0])
# m = int(input_data[1])
# graph = {i: [] for i in range(1, n + 1)}
# idx = 2
# for _ in range(m):
# u = int(input_data[idx])
# v = int(input_data[idx+1])
# graph[u].append(v)
# graph[v].append(u)
# idx += 2
# #initially 0 then assigned
# team_assignment = [0] * (n + 1)
# for pupil in range(1, n + 1):
# if team_assignment[pupil] == 0:
# team_assignment[pupil] = 1
# queue = deque([pupil])
# while queue:
# current = queue.popleft()
# current_team = team_assignment[current]
# #friend in ooposite
# opposite_team = 2 if current_team == 1 else 1
# for friend in graph[current]:
# if team_assignment[friend] == 0:
# team_assignment[friend] = opposite_team
# queue.append(friend)
# elif team_assignment[friend] == current_team:
# print("IMPOSSIBLE")
# return
# team_1 = [str(i) for i in range(1, n + 1) if team_assignment[i] == 1]
# team_2 = [str(i) for i in range(1, n + 1) if team_assignment[i] == 2]
# # print(f"Team 1: {', '.join(team_1)}")
# # print(f"Team 2: {', '.join(team_2)}")
# print(pupil.team_assignment())
# if __name__ == "__main__":
# solve_teams()
import sys
from collections import deque
def solve():
input_data = sys.stdin.read().split()
if not input_data:
return
iterator = iter(input_data)
try:
n_str = next(iterator)
except StopIteration:
return
n = int(n_str)
m = int(next(iterator))
graph = [[] for _ in range(n + 1)]
for _ in range(m):
u = int(next(iterator))
v = int(next(iterator))
graph[u].append(v)
graph[v].append(u)
teams = [0] * (n + 1)
for pupil in range(1, n + 1):
if teams[pupil] == 0:
teams[pupil] = 1
queue = deque([pupil])
while queue:
curr = queue.popleft()
curr_team = teams[curr]
#alternate teams
neighbor_team = 2 if curr_team == 1 else 1
for friend in graph[curr]:
if teams[friend] == 0:
teams[friend] = neighbor_team
queue.append(friend)
elif teams[friend] == curr_team:
#if a&b and a&c but b&c can't be so
print("IMPOSSIBLE")
return
sys.stdout.write(" ".join(str(teams[i]) for i in range(1, n + 1)) + "\n")
if __name__ == '__main__':
solve()
Test details
Test 1
Verdict: ACCEPTED
| input |
|---|
| 10 20 3 4 8 10 3 7 1 8 ... |
| correct output |
|---|
| 1 1 1 2 2 1 2 2 2 1 |
| user output |
|---|
| 1 1 1 2 2 1 2 2 2 1 |
Test 2
Verdict: ACCEPTED
| input |
|---|
| 10 20 1 3 8 10 2 4 6 8 ... |
| correct output |
|---|
| 1 1 2 2 1 1 1 2 1 1 |
| user output |
|---|
| 1 1 2 2 1 1 1 2 1 1 |
Test 3
Verdict: ACCEPTED
| input |
|---|
| 10 20 7 10 3 10 9 10 2 10 ... |
| correct output |
|---|
| 1 2 2 1 1 1 2 1 2 1 |
| user output |
|---|
| 1 2 2 1 1 1 2 1 2 1 |
Test 4
Verdict: ACCEPTED
| input |
|---|
| 10 20 2 4 2 10 7 10 4 6 ... |
| correct output |
|---|
| 1 2 1 1 2 2 2 1 2 1 |
| user output |
|---|
| 1 2 1 1 2 2 2 1 2 1 |
Test 5
Verdict: ACCEPTED
| input |
|---|
| 10 20 3 5 8 10 9 10 1 8 ... |
| correct output |
|---|
| IMPOSSIBLE |
| user output |
|---|
| IMPOSSIBLE |
Test 6
Verdict: ACCEPTED
| input |
|---|
| 100000 200000 47355 96505 90709 92058 735 80715 91802 94265 ... |
| correct output |
|---|
| 1 2 2 1 2 1 1 1 2 2 1 2 1 1 1 ... |
| user output |
|---|
| 1 2 2 1 2 1 1 1 2 2 1 2 1 1 1 ... |
Test 7
Verdict: ACCEPTED
| input |
|---|
| 100000 200000 59991 95794 95150 96051 78453 94730 90411 95523 ... |
| correct output |
|---|
| 1 1 1 2 2 1 1 2 1 2 1 2 2 2 1 ... |
| user output |
|---|
| 1 1 1 2 2 1 1 2 1 2 1 2 2 2 1 ... |
Test 8
Verdict: ACCEPTED
| input |
|---|
| 100000 200000 89827 96402 65137 86792 80965 94708 19479 48078 ... |
| correct output |
|---|
| 1 2 1 1 2 1 2 2 2 1 2 1 1 2 1 ... |
| user output |
|---|
| 1 2 1 1 2 1 2 2 2 1 2 1 1 2 1 ... |
Test 9
Verdict: ACCEPTED
| input |
|---|
| 100000 200000 72952 83723 66197 70052 2949 52160 55753 95651 ... |
| correct output |
|---|
| 1 1 2 2 2 1 1 2 2 2 2 2 1 2 1 ... |
| user output |
|---|
| 1 1 2 2 2 1 1 2 2 2 2 2 1 2 1 ... |
Test 10
Verdict: ACCEPTED
| input |
|---|
| 100000 200000 38942 96755 70049 82663 7746 72732 87819 99029 ... |
| correct output |
|---|
| IMPOSSIBLE |
| user output |
|---|
| IMPOSSIBLE |
Test 11
Verdict: ACCEPTED
| input |
|---|
| 5 4 1 2 3 4 4 5 5 3 |
| correct output |
|---|
| IMPOSSIBLE |
| user output |
|---|
| IMPOSSIBLE |
Test 12
Verdict: ACCEPTED
| input |
|---|
| 4 5 1 2 1 4 2 3 2 4 ... |
| correct output |
|---|
| IMPOSSIBLE |
| user output |
|---|
| IMPOSSIBLE |
