Vasya has got n books, numbered from 1 to n, arranged in a stack. The topmost book has number a_1, the next one — a_2, and so on. The book at the bottom of the stack has number a_n. All numbers are distinct.

Vasya wants to move all the books to his backpack in n steps. During i-th step he wants to move the book number b_i into his backpack. If the book with number b_i is in the stack, he takes this book and all the books above the book b_i, and puts them into the backpack; otherwise he does nothing and begins the next step. For example, if books are arranged in the order [1, 2, 3] (book 1 is the topmost), and Vasya moves the books in the order [2, 1, 3], then during the first step he will move two books (1 and 2), during the second step he will do nothing (since book 1 is already in the backpack), and during the third step — one book (the book number 3). Note that b_1, b_2, ..., b_n are distinct.

Help Vasya! Tell him the number of books he will put into his backpack during each step.

Input

The first line contains one integer n~(1 ≤ n ≤ 2 ⋅ 10^5) — the number of books in the stack.

The second line contains n integers a_1, a_2, ..., a_n~(1 ≤ a_i ≤ n) denoting the stack of books.

The third line contains n integers b_1, b_2, ..., b_n~(1 ≤ b_i ≤ n) denoting the steps Vasya is going to perform.

All numbers a_1 ... a_n are distinct, the same goes for b_1 ... b_n.

Output

Print n integers. The i-th of them should be equal to the number of books Vasya moves to his backpack during the i-th step.

Examples

Input

3
1 2 3
2 1 3


Output

2 0 1 


Input

5
3 1 4 2 5
4 5 1 3 2


Output

3 2 0 0 0 


Input

6
6 5 4 3 2 1
6 5 3 4 2 1


Output

1 1 2 0 1 1 

Note

The first example is described in the statement.

In the second example, during the first step Vasya will move the books [3, 1, 4]. After that only books 2 and 5 remain in the stack (2 is above 5). During the second step Vasya will take the books 2 and 5. After that the stack becomes empty, so during next steps Vasya won't move any books.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
import java.util.Set;
import java.util.Stack;
import java.util.StringTokenizer;
import java.util.TreeSet;
public class Main {
	//YOU CAN DO IT ....
	//Do what you love to do and give it your very best. Whether it's business or baseball, or the theater, or any field.
	//If you don't love what you're doing and you can't give it your best, get out of it. Life is too short. You'll be an old man before you know it.
	//Don't aim for success if you want it; just do what you love and believe in, and it will come naturally.
static int n; static int m; static int ans;static int count; static boolean flag;
static int A[];static int seg[];static boolean isPrime[];static boolean visited[] ;static int dp[][];
static ArrayList<pair> s[];static ArrayList<Integer>list;
static class pair{String first;int second;public pair(String x,int y){first=x;second=y;}}
static void seive(){isPrime[0] = isPrime[1] = true;for (int i = 2; i*i <= 2000000; i++) {if(isPrime[(int) i]) { long j=0; for ( j = i*i; j <= 2000000; j += i)isPrime[(int) j] = true;}}}
static int maxSum = Integer.MIN_VALUE; 
static int leftMax=0;
static int rightMax=0;// may be all negatives, do not init to 0

    public static void main(String[] args) throws IOException {

		//Scanner sc = new Scanner(new FileReader("lazy.in"));
		Scanner sc = new Scanner(System.in);
		  Hashtable<Integer,Integer> map=new Hashtable();
		  int n=sc.nextInt();
		  Stack<Integer> s=new Stack();
		  int arr[]=new int[n];
		  int arr2[]=new int[n];
		  for(int i=0;i<n;i++) {
			  arr[i]=sc.nextInt();
			  map.put(arr[i], i+1);
			  }
		  for(int i=0;i<n;i++)
			  arr2[i]=sc.nextInt();
		  int max=0;int prev=0;
		  for(int i=0;i<n;i++)
		  {      
			  if(map.get(arr2[i])<=max) {
			    	  System.out.print(0+" ");
		                 }
		  else {
			         prev=max;
		             max=map.get(arr2[i]);
		             System.out.print(max-prev+" ");
		  }
			   
				  
		  }
		  
		  
			
	}
    
	static class Scanner 
	{
		StringTokenizer st;
		BufferedReader br;

		public Scanner(InputStream s){    br = new BufferedReader(new InputStreamReader(s));}

		public Scanner(FileReader r){    br = new BufferedReader(r);}

		public String next() throws IOException 
		{
			while (st == null || !st.hasMoreTokens()) 
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

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

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

		public String nextLine() throws IOException {return br.readLine();}

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

		public boolean ready() throws IOException {return br.ready();}


	}
}   
     