import java.util.Scanner;
import java.util.Arrays;

class Oct15_MCG {
	public static void main(String[] args) {

		Scanner kb = new Scanner(System.in);

		int[] a = {1,6,7,8,3,3,3};
		int[] b = {7,1,3,9,3};	

		int[] c = intersection(a,b);
		printArray(c);

	}

	/*
	 * Write a method called intersection that takes two integer arrays
	 * as arguments and returns an array of integers containing the 
	 * the intersection of the multisets of elements in the two
	 * input arrays, respectively.
	 *
	 * If A = {1,3,3,3,6,7,8}
	 *    B = {1,3,3,7,9}
	 * then the method should return {1,3,3,7}
	 */

	static int[] intersection(int[] arr1, int[] arr2) {

		java.util.Arrays.sort(arr1);
		printArray(arr1);

		Arrays.sort(arr2);
		printArray(arr2);

		int min = (arr1.length < arr2.length) ? arr1.length : arr2.length; 

		int[] arr3 = new int[min];
		int count = 0;

		int j = 0;
		for(int i = 0; i < arr1.length; i++) {
			for(; j < arr2.length; j++) {
				if(arr1[i] == arr2[j]) {
					arr3[count] = arr1[i];
					count++;
					j++;
					break;
				}
				if (arr1[i] < arr2[j]) {
					break;
				}
			}
		}

		int[] finalArray = new int[count];
		for(int i = 0; i < finalArray.length; i++) {
			finalArray[i] = arr3[i];
		}
		return finalArray;
	}

	static void printArray(int[] arr) {
		for(int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
	}

}

// end of file
