There is a country with n citizens. The i-th of them initially has a_{i} money. The government strictly controls the wealth of its citizens. Whenever a citizen makes a purchase or earns some money, they must send a receipt to the social services mentioning the amount of money they currently have.

Sometimes the government makes payouts to the poor: all citizens who have strictly less money than x are paid accordingly so that after the payout they have exactly x money. In this case the citizens don't send a receipt.

You know the initial wealth of every citizen and the log of all events: receipts and payouts. Restore the amount of money each citizen has after all events.

Input

The first line contains a single integer n (1 ≤ n ≤ 2 ⋅ 10^{5}) — the numer of citizens.

The next line contains n integers a_1, a_2, ..., a_n (0 ≤ a_{i} ≤ 10^{9}) — the initial balances of citizens.

The next line contains a single integer q (1 ≤ q ≤ 2 ⋅ 10^{5}) — the number of events.

Each of the next q lines contains a single event. The events are given in chronological order.

Each event is described as either 1 p x (1 ≤ p ≤ n, 0 ≤ x ≤ 10^{9}), or 2 x (0 ≤ x ≤ 10^{9}). In the first case we have a receipt that the balance of the p-th person becomes equal to x. In the second case we have a payoff with parameter x.

Output

Print n integers — the balances of all citizens after all events.

Examples

Input


4
1 2 3 4
3
2 3
1 2 2
2 1


Output


3 2 3 4 


Input


5
3 50 2 1 10
3
1 2 0
2 8
1 3 20


Output


8 8 20 8 10 

Note

In the first example the balances change as follows: 1 2 3 4 → 3 3 3 4 → 3 2 3 4 → 3 2 3 4

In the second example the balances change as follows: 3 50 2 1 10 → 3 0 2 1 10 → 8 8 8 8 10 → 8 8 20 8 10
import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.InputStreamReader;
import java.util.*;
import java.io.BufferedReader;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        Task solver = new Task();
        solver.solve(in, out);
        out.close();
    }

    static class Task {
        public void solve(InputReader in, PrintWriter out) {
            int n = in.nextInt();   //几个账户
            int[] a = new int[n];
            for (int i = 0; i < n; i++) {
                a[i] = in.nextInt();
            }
            int q = in.nextInt(); //几次打款
            int[][] b = new int[q][3];
            for (int i = 0; i < q; i++) {
                b[i][0] = in.nextInt();
                b[i][1] = in.nextInt();
                if (b[i][0] == 1) {
                    b[i][2] = in.nextInt();
                }
            }
            //从后往前计算第n次转账之后，最大的批量提额是多少；最后一次账户金额更新是第几次，金额多少
            int[] c = new int[q];   //从i开始最大批量提额金额
            int[] d = new int[n];   //对应账户最后一次更新是第几次
            int[] e = new int[n];   //对应账户最后一次更新金额\
            for (int i = 0; i < n; i++) e[i] = -1;
            int max = 0;
            for (int i = q - 1; i >= 0; i--) {
                if (b[i][0] == 2) max = Math.max(max, b[i][1]);
                c[i] = max;
                if (b[i][0] == 1 && e[b[i][1] - 1] < 0) {
                    d[b[i][1] - 1] = i; //第i次时候，更新了第b[i][1]个账户的值
                    e[b[i][1] - 1] = b[i][2]; //以及对应金额
                }
            }
            //对每个值，求他初始值/最后一次更新的值，和批量提额的哪个大
            for (int i = 0; i < n; i++) {
                out.print(Math.max(e[i] < 0 ? a[i] : e[i], c[d[i]]) + " ");
            }
        }
    }

    static class InputReader {
        String x = "select mt_user_id from dm_topic_card_jingwan_label_ss where card_meta_id='4' and ( locate('\\'4\\'', rule_id_list)>0 ";
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

    }
}