Alice likes snow a lot! Unfortunately, this year's winter is already over, and she can't expect to have any more of it. Bob has thus bought her a gift — a large snow maker. He plans to make some amount of snow every day. On day i he will make a pile of snow of volume Vi and put it in her garden.

Each day, every pile will shrink a little due to melting. More precisely, when the temperature on a given day is Ti, each pile will reduce its volume by Ti. If this would reduce the volume of a pile to or below zero, it disappears forever. All snow piles are independent of each other. 

Note that the pile made on day i already loses part of its volume on the same day. In an extreme case, this may mean that there are no piles left at the end of a particular day.

You are given the initial pile sizes and the temperature on each day. Determine the total volume of snow melted on each day. 

Input

The first line contains a single integer N (1 ≤ N ≤ 105) — the number of days. 

The second line contains N integers V1, V2, ..., VN (0 ≤ Vi ≤ 109), where Vi is the initial size of a snow pile made on the day i.

The third line contains N integers T1, T2, ..., TN (0 ≤ Ti ≤ 109), where Ti is the temperature on the day i.

Output

Output a single line with N integers, where the i-th integer represents the total volume of snow melted on day i.

Examples

Input

3
10 10 5
5 7 2


Output

5 12 4


Input

5
30 25 20 15 10
9 10 12 4 13


Output

9 20 35 11 25

Note

In the first sample, Bob first makes a snow pile of volume 10, which melts to the size of 5 on the same day. On the second day, he makes another pile of size 10. Since it is a bit warmer than the day before, the first pile disappears completely while the second pile shrinks to 3. At the end of the second day, he has only a single pile of size 3. On the third day he makes a smaller pile than usual, but as the temperature dropped too, both piles survive till the end of the day.
//package CFMAR10;

import java.io.*;
import java.util.*;

public class Q2 {

    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader() {
            reader = new BufferedReader(new InputStreamReader(System.in), 32768);
            tokenizer = null;
        }

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(System.in), 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 char nextChar() {
            return next().charAt(0);
        }

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

        public long nextLong() {
            return Long.parseLong(next());
        }

        public double nextDouble() {
            return Double.parseDouble(next());
        }
    }

    static int binarySearch(long arr[], long x) {

        int l = 0, r = arr.length - 1,ans=0;

        while (l <= r) {
            int m = l + (r - l) / 2;

            // Check if x is present at mid
            if (arr[m] == x)
                return m;

            // If x greater, ignore left half
            if (arr[m] < x) {
                l = m + 1;
                ans=m;
            }
                // If x is smaller, ignore right half
            else
                r = m - 1;
        }

        // if we reach here, then element was
        // not present
        return ans;
    }

    public static int upperBound(long[] list, long val) {
        int count = list.length - 1, first = 0, it = 0, step = 0;

        while (count > 0) {
            it = first;
            step = count / 2;
            it += step;
            if (!(val < list[it])) {
                first = it + 1;
                it++;
                count -= step + 1;
            } else {
                count = step;
            }
        }
        return first;
    }


    public static void main(String[] args) {

        InputReader in = new InputReader();
        int N = in.nextInt();

        long snow[] = new long[N+1];
        long melt[] = new long[N+1];
        long pre[] = new long[N+1];
        long FinalAns[]=new long[N];

        for (int l = 0; l < N; l++) {
            snow[l] = in.nextInt();
        }

        long smallAns = 0;
        for (int l = 0; l < N; l++) {
            melt[l] = in.nextInt();
            smallAns += melt[l];
            pre[l] = smallAns;
        }

        long temp[]=new long[N+1];

        for (int i = 0; i < N; i++) {

            if(melt[i]>=snow[i]){
                FinalAns[i]+=snow[i];
                continue;
            }

            long var=snow[i];

            if(i>0){
                var+=pre[i-1];
            }

          //  int x=binarySearch(pre,var);
            int x=upperBound(pre,var);
        //    System.out.println("index  "  + x);


            temp[i]++;
            temp[x]--;

            if(pre[x] > var){
                
                FinalAns[x]+=(var-pre[x-1]);
            }



        }


        int i;
        for( i=1;i<N;i++){
            temp[i]+=temp[i-1];
        }

//        for(i=0;i<N;i++) {
//            System.out.print(temp[i] + " ");
//        }
//        System.out.println();


        for( i=0;i<N;i++) {
            System.out.print(FinalAns[i] +  (temp[i]*melt[i])+" ");
        }
    }
}
