You are given an array a consisting of n integers. Each a_i is one of the six following numbers: 4, 8, 15, 16, 23, 42.

Your task is to remove the minimum number of elements to make this array good.

An array of length k is called good if k is divisible by 6 and it is possible to split it into k/6 subsequences 4, 8, 15, 16, 23, 42.

Examples of good arrays:

  * [4, 8, 15, 16, 23, 42] (the whole array is a required sequence); 
  * [4, 8, 4, 15, 16, 8, 23, 15, 16, 42, 23, 42] (the first sequence is formed from first, second, fourth, fifth, seventh and tenth elements and the second one is formed from remaining elements); 
  * [] (the empty array is good). 



Examples of bad arrays: 

  * [4, 8, 15, 16, 42, 23] (the order of elements should be exactly 4, 8, 15, 16, 23, 42); 
  * [4, 8, 15, 16, 23, 42, 4] (the length of the array is not divisible by 6); 
  * [4, 8, 15, 16, 23, 42, 4, 8, 15, 16, 23, 23] (the first sequence can be formed from first six elements but the remaining array cannot form the required sequence). 

Input

The first line of the input contains one integer n (1 ≤ n ≤ 5 ⋅ 10^5) — the number of elements in a.

The second line of the input contains n integers a_1, a_2, ..., a_n (each a_i is one of the following numbers: 4, 8, 15, 16, 23, 42), where a_i is the i-th element of a.

Output

Print one integer — the minimum number of elements you have to remove to obtain a good array.

Examples

Input


5
4 8 15 16 23


Output


5


Input


12
4 8 4 15 16 8 23 15 16 42 23 42


Output


0


Input


15
4 8 4 8 15 16 8 16 23 15 16 4 42 23 42


Output


3
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {
	static final int[] SEQUENCE = { 4, 8, 15, 16, 23, 42 };

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt();
		int[] a = new int[n];
		for (int i = 0; i < a.length; i++) {
			a[i] = sc.nextInt();
		}
		System.out.println(solve(a));

		sc.close();
	}

	static int solve(int[] a) {
		@SuppressWarnings("unchecked")
		Queue<Integer>[] indexQueues = new Queue[SEQUENCE.length];
		for (int i = 0; i < indexQueues.length; i++) {
			indexQueues[i] = new LinkedList<>();
		}

		for (int i = 0; i < a.length; i++) {
			for (int j = 0;; j++) {
				if (SEQUENCE[j] == a[i]) {
					indexQueues[j].offer(i);

					break;
				}
			}
		}

		int subsequenceNum = 0;
		while (true) {
			boolean found = true;
			int minIndex = 0;

			for (int i = 0; i < SEQUENCE.length; i++) {
				while (!indexQueues[i].isEmpty() && indexQueues[i].peek() < minIndex) {
					indexQueues[i].poll();
				}

				if (indexQueues[i].isEmpty()) {
					found = false;
					break;
				}

				minIndex = indexQueues[i].poll() + 1;
			}

			if (!found) {
				break;
			}

			subsequenceNum++;
		}

		return a.length - subsequenceNum * SEQUENCE.length;
	}
}