from sys import stdin input = stdin.readline from types import GeneratorType from collections import deque def bootstrap(f, stack=[]): def wrappedfunc(*args, **kwargs): if stack: return f(*args, **kwargs) to = f(*args, **kwargs) while True: if type(to) is GeneratorType: stack.append(to) to = next(to) else: stack.pop() if not stack: break to = stack[-1].send(to) return to return wrappedfunc N = int(input()) G = [[] for _ in range(N)] D = dict() for i in range(N): u, v = map(int, input().split()) u, v = u-1, v-1 G[u].append(v) G[v].append(u) D[(u, v)] = (i, 0) D[(v, u)] = (i, 1) @bootstrap def dfs(n, p): visited[n] = True order.append(n) for v in G[n]: if v == p: continue if not visited[v]: yield dfs(v, n) elif not finished[v]: for i in range(order.index(v), len(order)): cycle.append(order[i]) order.pop() finished[n] = True yield visited = [False]*N finished = [False]*N order = [] cycle = [] dfs(0, -1) ans = [-1]*N visited = [False]*N que = deque() for i in range(len(cycle)): idx, res = D[(cycle[i], cycle[(i+1)%len(cycle)])] ans[idx] = res visited[cycle[i]] = True que.append(cycle[i]) while que: n = que.popleft() for v in G[n]: if not visited[v]: visited[v] = True que.append(v) idx, res = D[(v, n)] ans[idx] = res for a in ans: print(["->", "<-"][a])