Problem:
Hit and Blow

Let's play Hit and Blow game. A imagines four numbers and B guesses the numbers. After B picks out four numbers, A answers:

The number of numbers which have the same place with numbers A imagined (Hit)

The number of numbers included (but different place) in the numbers A imagined (Blow)

For example, if A imagined numbers:

9 1 8 2

and B chose:

4 1 5 9

A should say 1 Hit and 1 Blow.

Write a program which reads four numbers A imagined and four numbers B chose and prints the number of Hit and Blow respectively. You may assume that the four numbers are all different and within from 0 to 9.

Input

The input consists of multiple datasets. Each dataset set consists of:

a1 a2 a3 a4
b1 b2 b3 b4

, where ai (0 ≤ ai ≤ 9) is i-th number A imagined and bi (0 ≤ bi ≤ 9) is i-th number B chose.

The input ends with EOF. The number of datasets is less than or equal to 50.

Output

For each dataset, print the number of Hit and Blow in a line. These two numbers should be separated by a space.

Sample Input

9 1 8 2
4 1 5 9
4 6 8 2
4 6 3 2

Output for the Sample Input

1 1
3 0

Solution in C# (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;

class AIZU0025{
   public static void Translate(string s, out List<int> b) {
      b=new List<int>();
      string[] ss=s.Split(' ');
      foreach (string s1 in ss) b.Add(int.Parse(s1));
   }
   public static void Main(string[] args) {
      List<int> Target=new List<int>(), Query=new List<int>();
      Queue<string> G=new Queue<string>();
      string s;int hit, blow;
      string[] ss;
      while(true) { 
         s = Console.ReadLine();
         if (string.IsNullOrEmpty(s)) break;
         ss=s.Split(' ');
         if (ss.Length<4) break;
         for (int I = 0; I<4; I++) Target.Add(int.Parse(ss[I]));
         s = Console.ReadLine();
         if (string.IsNullOrEmpty(s)) break;
         ss=s.Split(' ');
         if (ss.Length<4) break;
         for (int I = 0; I<4; I++) Query.Add(int.Parse(ss[I]));
         hit = Hit(Target,Query);
         blow = Target.Intersect(Query).Count()-hit;
         G.Enqueue(string.Format("{0} {1}",hit,blow));
         Target.Clear();Query.Clear();
      }
      while (G.Count>0) Console.WriteLine(G.Dequeue());
   }
   public static int Hit(List<int> Target,List<int> Query) {
      int res = 0;
      for (int i = 0; i<4; i++)
         if (Target[i]==Query[i]) 
            res++;
      return res;
   }
}