88 lines
2.4 KiB
Python
88 lines
2.4 KiB
Python
from collections import deque
|
|
|
|
import sys
|
|
|
|
input = sys.stdin.readline
|
|
|
|
|
|
class FinalRankSolver:
|
|
def __init__(self, n: int, last_rank: list[int], m: int, changes: list[list[int]]):
|
|
self.n = n
|
|
self.last_rank = last_rank
|
|
self.m = m
|
|
self.changes = changes
|
|
|
|
def solve(self) -> int | list[int]:
|
|
|
|
flag = 1
|
|
|
|
adj = [[0 for _ in range(self.n)] for _ in range(self.n)]
|
|
|
|
indeg = [0] * self.n
|
|
|
|
last_rank_index = [0] * self.n
|
|
|
|
for i, r in enumerate(self.last_rank):
|
|
last_rank_index[r - 1] = i
|
|
|
|
for i in range(1, self.n):
|
|
for j in range(i):
|
|
adj[self.last_rank[i] - 1][self.last_rank[j] - 1] = 1
|
|
indeg[self.last_rank[j] - 1] += 1
|
|
|
|
for first, second in self.changes:
|
|
if last_rank_index[first - 1] > last_rank_index[second - 1]:
|
|
adj[first - 1][second - 1] = 0
|
|
adj[second - 1][first - 1] = 1
|
|
indeg[second - 1] -= 1
|
|
indeg[first - 1] += 1
|
|
else:
|
|
first, second = second, first
|
|
adj[first - 1][second - 1] = 0
|
|
adj[second - 1][first - 1] = 1
|
|
indeg[second - 1] -= 1
|
|
indeg[first - 1] += 1
|
|
|
|
new_rank = []
|
|
q = deque()
|
|
for i, v in enumerate(indeg):
|
|
if v == 0:
|
|
q.append(i)
|
|
|
|
while q:
|
|
index = q.popleft()
|
|
indeg[index] = -1
|
|
new_rank.append(index + 1)
|
|
for ix, vi in enumerate(adj[index]):
|
|
if vi == 1:
|
|
indeg[ix] -= 1
|
|
for i, v in enumerate(indeg):
|
|
if v == 0:
|
|
q.append(i)
|
|
|
|
if any(deg != -1 for deg in indeg):
|
|
flag = 0
|
|
|
|
if flag:
|
|
return new_rank
|
|
else:
|
|
return flag
|
|
|
|
|
|
if __name__ == "__main__":
|
|
tc = int(input())
|
|
|
|
for _ in range(tc):
|
|
n = int(input())
|
|
last_rank = list(map(int, input().split()))
|
|
m = int(input())
|
|
changes = [list(map(int, input().split())) for i in range(m)]
|
|
|
|
res = FinalRankSolver(n, last_rank, m, changes).solve()
|
|
if res == -1:
|
|
print("?")
|
|
elif res == 0:
|
|
print("IMPOSSIBLE")
|
|
else:
|
|
print(" ".join(map(str, res[::-1])))
|