Problem: Requirements

* All inputs are of non-negative integer value.
* T_{\text{max}} = 10000
* 200 \leq |V| \leq 400
* 1.5 |V| \leq |E| \leq 2 |V|
* 1 \leq u_{i}, v_{i} \leq |V| (1 \leq i \leq |E|)
* 1 \leq d_{u_i, v_i} \leq \lceil 4\sqrt{2|V|} \rceil (1 \leq i \leq |E|)
* The given graph has no self-loops / multiple edges and is guaranteed to be connected.
* 0 \leq N_{\text{new}} \leq 1
* 1 \leq \mathrm{new\\_id}_{i} \leq T_{\text{last}}+1 (1 \leq i \leq N_{\text{new}}). Note: If all orders are generated by the order generation rule as explained above, the total number of orders is at most T_{\text{last}}+1. Therefore, the possible range of \mathrm{new\\_id}_{i} should be from 1 to T_{\text{last}}+1.
* 2 \leq \mathrm{dst}_i \leq |V| (1 \leq i \leq N_{\text{new}})
* The order IDs \mathrm{new\\_{id}}_i are unique.

Input Format

Input is provided in the following form:


|V| |E|
u_{1} v_{1} d_{u_{1}, v_{1}}
u_{2} v_{2} d_{u_{2}, v_{2}}
:
u_{|E|} v_{|E|} d_{u_{|E|}, v_{|E|}}
T_{\text{max}}
\mathrm{info}_{0}
\mathrm{info}_{1}
:
\mathrm{info}_{T_{\text{max}}-1}


* In the first line |V| denotes the number of vertices, while |E| denotes the number of edges.
* The following |E| lines denote the edges of the graph. In particular, in the ith line u_{i} and v_{i} denote the edge connecting u_{i} and v_{i} and d_{u_{i}, v_{i}} the corresponding distance.
* The following line denotes the number of steps T_{\text{max}}.



In the following line, \mathrm{info}_t is information about the order from the customer that occurs at time t. \mathrm{info}_t is given in the form:


N_{\text{new}}
\mathrm{new\_id}_1 \mathrm{dst}_1
\mathrm{new\_id}_2 \mathrm{dst}_2
\vdots
\mathrm{new\_id}_{N_{\text{new}}} \mathrm{dst}_{N_{\text{new}}}


* N_{\text{new}} represents the number of new orders which appear at time t.
* The next N_{\text{new}} lines give the newly generated order information. The i-th order information indicates that the order ID \mathrm{new\\_{id}}_i of the new order, while \mathrm{dst}_i denotes the vertex to which the customer wishes the order to be delivered.
* Note: If N_{\text{new}}=0, there are no new lines.

Output Format

The Output expects T_{\text{max}} integers in the format specified below.


\mathrm{command}_{0}
\mathrm{command}_{1}
:
\mathrm{command}_{T_{\text{max}}-1}


In particular, \mathrm{command}_{i} shall specify the movement of the delivery car by using one of the following two options:

1) `stay`, if the car shall not move:


-1


2) `move w`, if the car shall be moved one step towards the neighboring vertex w


w


Note that in case of 2) w has to satisfy the following conditions:

* w \in V
* If the car is at vertex u: \left\\{ u, w \right\\} \in E .
* If the car is on the edge \left\\{ u, v \right\\}, w must either satisfy u = w or v = w.



* * *

Examples

Input




Output




Input

5 7
1 2 5
5 3 4
2 4 8
1 5 1
2 3 3
4 5 3
4 3 9
4
1
1 2
1
2 5
1
3 4
0


Output

2
-1
1
5

Solution (in PYTHON3):

Solution:
#!usr/bin/env python3
from collections import defaultdict,deque
from heapq import heappush, heappop
import sys
import math
import bisect
import random
def LI(): return [int(x) for x in sys.stdin.readline().split()]
def I(): return int(sys.stdin.readline())
def LS():return [list(x) for x in sys.stdin.readline().split()]
def S():
    res = list(sys.stdin.readline())
    if res[-1] == "\n":
        return res[:-1]
    return res
def IR(n):
    return [I() for i in range(n)]
def LIR(n):
    return [LI() for i in range(n)]
def SR(n):
    return [S() for i in range(n)]
def LSR(n):
    return [LS() for i in range(n)]

sys.setrecursionlimit(1000000)
mod = 1000000007

def solve():
    def score(ans):
        res = 0
        x = 0
        st = 1
        dx = 0
        f = [[] for i in range(n)]
        j = 0
        query = []
        for i in range(t):
            while j < len(q) and q[j][0] == i:
                k,l = q[j]
                query.append((l,k))
                j += 1
            if st:
                if x == 0:
                    while query:
                        l,k = query.pop()
                        f[l].append(k)
                else:
                    while f[x]:
                        res += T-(i-f[x].pop())**2
            if ans[i] == -1:
                continue
            else:
                y = ans[i]-1
                st = 0
                dx += 1
                if d[x][y] == dx:
                    dx = 0
                    x = y
                    st = 1
        if st:
            if x != 0:
                while f[x]:
                    res += T-(i-f[x].pop())**2
        return res

    def dijkstra(s):
        d = [float("inf")]*n
        pre = [None]*n
        d[s] = 0
        q = [(0,s)]
        while q:
            dx,x = heappop(q)
            for y,w in v[x]:
                nd = dx+w
                if nd < d[y]:
                    d[y] = nd
                    pre[y] = x
                    heappush(q,(nd,y))
        path = [[i] for i in range(n)]
        for i in range(n):
            while path[i][-1] != s:
                path[i].append(pre[path[i][-1]])
            path[i] = path[i][::-1][1:]
        return d,path

    n,m = LI()
    v = [[] for i in range(n)]
    for i in range(m):
        a,b,d = LI()
        a -= 1
        b -= 1
        v[a].append((b,d))
        v[b].append((a,d))
    d = [None]*n
    path = [None]*n
    for s in range(n):
        d[s],path[s] = dijkstra(s)
    t = I()
    q = []
    for i in range(t):
        N = I()
        if N == 0:
            continue
        a,y = LI()
        y -= 1
        q.append((i,y))
    x = 0
    dx = 0
    dy = 0
    query = deque()
    dst = 0
    go = []
    f = 0
    time = [None]*n
    fl = [0]*n
    ans = []
    j = 0
    T = t**2
    for i in range(t):
        while go and not fl[go[0]]:
            go.pop(0)
        while j < len(q) and q[j][0] == i:
            k,l = q[j]
            query.append(l)
            if time[l] == None:
                time[l] = k
            j += 1
        if not f:
            if x == 0:
                if not query:
                    ans.append(-1)
                else:
                    f = 1
                    while query:
                        dst = query.popleft()
                        go.append(dst)
                        fl[dst] = 1
                    go = list(set(go))
                    go.sort(key = lambda a:time[a]+d[x][a])
                    time = [None]*n
                    dst = go.pop(0)
                    p = [i for i in path[x][dst]]
                    y = p.pop(0)
                    ans.append(y+1)
                    dx = 1
                    dy = d[x][y]
                    if dx == dy:
                        fl[y] = 0
                        x = y
                        dx = 0
                        if x == dst:
                            if go:
                                dst = go.pop(0)
                                p = [i for i in path[x][dst]]
                                y = p.pop(0)
                                dy = d[x][y]
                            else:
                                f = 0
                                dst = 0
                                p = [i for i in path[x][dst]]
                                y = p.pop(0)
                                dy = d[x][y]
                        else:
                            y = p.pop(0)
                            dy = d[x][y]

            else:
                ans.append(y+1)
                dx += 1
                if dx == dy:
                    fl[y] = 0
                    x = y
                    dx = 0
                    if p:
                        y = p.pop(0)
                        dy = d[x][y]
        else:
            ans.append(y+1)
            dx += 1
            if dx == dy:
                fl[y] = 0
                x = y
                dx = 0
                if x == dst:
                    if go:
                        dst = go.pop(0)
                        p = [i for i in path[x][dst]]
                        y = p.pop(0)
                        dy = d[x][y]
                    else:
                        f = 0
                        dst = 0
                        p = [i for i in path[x][dst]]
                        y = p.pop(0)
                        dy = d[x][y]
                else:
                    y = p.pop(0)
                    dy = d[x][y]
    x = 0
    dx = 0
    dy = 0
    query = deque()
    dst = 0
    go = []
    f = 0
    time = [None]*n
    fl = [0]*n
    ans_ = []
    j = 0
    T = t**2
    for i in range(t):
        while go and not fl[go[0]]:
            go.pop(0)
        while j < len(q) and q[j][0] == i:
            k,l = q[j]
            query.append(l)
            if time[l] == None:
                time[l] = k
            j += 1
        if not f:
            if x == 0:
                if not query:
                    ans_.append(-1)
                else:
                    f = 1
                    while query:
                        dst = query.popleft()
                        go.append(dst)
                        fl[dst] = 1
                    go = list(set(go))
                    go.sort(key = lambda a:time[a])
                    time = [None]*n
                    dst = go.pop(0)
                    p = [i for i in path[x][dst]]
                    y = p.pop(0)
                    ans_.append(y+1)
                    dx = 1
                    dy = d[x][y]
                    if dx == dy:
                        fl[y] = 0
                        x = y
                        dx = 0
                        if x == dst:
                            if go:
                                dst = go.pop(0)
                                p = [i for i in path[x][dst]]
                                y = p.pop(0)
                                dy = d[x][y]
                            else:
                                f = 0
                                dst = 0
                                p = [i for i in path[x][dst]]
                                y = p.pop(0)
                                dy = d[x][y]
                        else:
                            y = p.pop(0)
                            dy = d[x][y]

            else:
                ans_.append(y+1)
                dx += 1
                if dx == dy:
                    fl[y] = 0
                    x = y
                    dx = 0
                    if p:
                        y = p.pop(0)
                        dy = d[x][y]
        else:
            ans_.append(y+1)
            dx += 1
            if dx == dy:
                fl[y] = 0
                x = y
                dx = 0
                if x == dst:
                    if go:
                        dst = go.pop(0)
                        p = [i for i in path[x][dst]]
                        y = p.pop(0)
                        dy = d[x][y]
                    else:
                        f = 0
                        dst = 0
                        p = [i for i in path[x][dst]]
                        y = p.pop(0)
                        dy = d[x][y]
                else:
                    y = p.pop(0)
                    dy = d[x][y]
    if score(ans) > score(ans_):
        for i in ans:
            print(i)
    else:
        for i in ans_:
            print(i)
    return

#Solve
if __name__ == "__main__":
    solve()