Problem:
Score : 100 points

Problem Statement

Based on some criterion, Snuke divided the integers from 1 through 12 into three groups as shown in the figure below.
Given two integers x and y (1 ≤ x < y ≤ 12), determine whether they belong to the same group.

Constraints

x and y are integers.

1 ≤ x < y ≤ 12

Input

Input is given from Standard Input in the following format:

x y

Output

If x and y belong to the same group, print Yes; otherwise, print No.

Sample Input 1

1 3

Sample Output 1

Yes

Sample Input 2

2 4

Sample Output 2

No

Solution in C# (Mono 4.6.2.0) (judge verdict: Accepted)

using System;
using System.IO;
using System.Text;
using System.Collections.Generic;
using System.Linq;

namespace aaaa
{
	class MainClass
	{
		public static void Main(string[] args)
		{
			var ls = AskIntList("");

			//var ls = args.Select((arg) => int.Parse(arg)).ToArray();

			var aGroup = new int[] { 1, 3, 5, 7, 8, 10, 12 };
			var bGroup = new int[] { 4,6,9,11 };
			var cGroup = new int[] { 2 };

			bool isAMatch = aGroup.Contains(ls[0]) && aGroup.Contains(ls[1]);
			bool isBMatch = bGroup.Contains(ls[0]) && bGroup.Contains(ls[1]);
			bool isCMatch = cGroup.Contains(ls[0]) && cGroup.Contains(ls[1]);

			if(isAMatch || isBMatch || isCMatch)
				Console.WriteLine("Yes");
			else
				Console.WriteLine("No");
		}

/*----------------以下汎用的に使う関数------------------------------*/

		private static List<char> ConvertIntToCharList(int num)
		{
		List<char> answer = new List<char>();
		for (int i = 1; Math.Abs(num) >= Math.Pow(10, i - 1); i++)
		{
		//下から数えてi桁目の数字を抽出
		int curKetaNumber = (num % (int)Math.Pow(10, i) - num % (int)Math.Pow(10, i - 1));
		//123なら100,20,3が抽出できたので、1,2,3にする。
		curKetaNumber /= (int)Math.Pow(10, i - 1);

		answer.Add((char)(curKetaNumber + '0'));
		}

		return answer;
		}

		/*public static void SaveTextData(List<string> stringLs,string fileName)
		{
			StreamWriter cWriter = (
				new StreamWriter(fileName,Encoding.Default)
			);

			foreach (var str in stringLs)
			{
				cWriter.WriteLine(str);
			}

			cWriter.Close();
		}*/

		public static List<List<char>> GetTextDataAsCharLists(string fileName)
		{
		List<List<char>> ans = new List<List<char>>();


		// StreamReader の新しいインスタンスを生成する
		StreamReader cReader = (
			new StreamReader(fileName, Encoding.Default)
		);

		// 読み込みできる文字がなくなるまで繰り返す
		while (cReader.Peek() >= 0)
		{
		// ファイルを 1 行ずつ読み込む
		string stBuffer = cReader.ReadLine();

		ans.Add(stBuffer.ToCharArray().ToList());
		}
		// cReader を閉じる (正しくは オブジェクトの破棄を保証する を参照)
		cReader.Close();

		return ans;
		}

		public static List<string> GetTextDataAsStrings(string fileName)
		{
		List<string> ans = new List<string>();

		// StreamReader の新しいインスタンスを生成する
		StreamReader cReader = (
			new StreamReader(fileName, Encoding.Default)
		);

		// 読み込みできる文字がなくなるまで繰り返す
		while (cReader.Peek() >= 0)
		{
		// ファイルを 1 行ずつ読み込む
		string stBuffer = cReader.ReadLine();

		ans.Add(stBuffer);
		}
		// cReader を閉じる (正しくは オブジェクトの破棄を保証する を参照)
		cReader.Close();

		return ans;
		}

		public static List<List<char>> ChangeXYTextData(List<List<char>> ls)
		{
		var ans = new List<List<char>>();
		for (int i = 0; i < ls.OrderByDescending(obj => obj.Count).ToList()[0].Count; i++)
		{
		var charList = new List<char>();
		for (int j = 0; j < ls.Count; j++)
		{
		charList.Add(ls[j][i]);
		}
		ans.Add(charList);
		}
		return ans;
		}

		private static List<int> ConvertStringToListInt(string rawData)
		{
		List<string> strList = rawData.Split(',').ToList();
		List<int> intList = strList.Select(int.Parse).ToList();

		return intList;
		}

		private static bool TryConvertStringToListInt(string rawData, out List<int> ans)
		{
		bool flag = true;

		//stringをカンマ区切りで分解(例外処理有り)
		List<string> strList = rawData.Split(' ').ToList();
		try
		{

		}
		catch
		{
		flag = false;
		}

		//区切った文字を数値にParseする(例外処理有り)
		List<int> intList = new List<int>();

		foreach (var obj in strList)
		{
		int num = new int();
		if (!int.TryParse(obj, out num))
		flag = false;
		else
		intList.Add(num);
		}

		ans = intList;

		return flag;
		}

		private static bool TryConvertStringToListString(string rawData, out List<string> ans)
		{
		bool flag = true;

		//stringをカンマ区切りで分解(例外処理有り)
		List<string> strList = rawData.Split(' ').ToList();
		try
		{

		}
		catch
		{
		flag = false;
		}

		ans = strList;

		return flag;
		}

		private static List<char> ConvertStringToListChar(string rawData)
		{
		return rawData.ToList();
		}

		public static void GetInput(List<List<char>> dataList)
		{
		foreach (var obj in dataList)
		{
		foreach (var mozi in obj)
		{
		Console.Write(mozi);
		}
		Console.Write("\n");
		}
		}

		public static List<int> AskIntList(string message, int num)
		{

		var ls = new List<int>();
		while (true)
		{
		ls = AskIntList(message);
		if (ls.Count != num)
		Console.WriteLine("個数が違います");
		else
		break;
		}

		return ls;
		}

		public static List<int> AskIntList(string message)
		{
		Console.WriteLine(message);

		var ans = new List<int>();
		while (true)
		{
		if (!TryConvertStringToListInt(Console.ReadLine(), out ans))
		Console.WriteLine("正しく入力してください");
		else
		break;
		}
		return ans;
		}

		public static List<string> AskStringList(string message, int num)
		{

		var ls = new List<string>();
		while (true)
		{
		ls = AskStringList(message);
		if (ls.Count != num)
		Console.WriteLine("個数が違います");
		else
		break;
		}

		return ls;
		}

		public static List<string> AskStringList(string message)
		{
		Console.WriteLine(message);

		var ans = new List<string>();
		while (true)
		{
		if (!TryConvertStringToListString(Console.ReadLine(), out ans))
		Console.WriteLine("正しく入力してください");
		else
		break;
		}
		return ans;
		}

		public static List<char> AskCharList(string message, int num)
		{
		var ls = new List<char>();
		while (true)
		{
		ls = AskCharList(message);
		try
		{
		if (ls.Count != num)
		Console.WriteLine("個数が違います");
		else
		break;
		}
		catch
		{
		Console.WriteLine("正しく入力してください");
		}

		}
		return ls;
		}

		public static List<char> AskCharList(string message)
		{
		Console.WriteLine(message);
		return ConvertStringToListChar(Console.ReadLine());
		}

		public static string AskString(string message)
		{
		Console.WriteLine(message);
		return Console.ReadLine();
		}

		public static int AskInt(string message)
		{
		Console.WriteLine(message);

		int ans;

		while (!int.TryParse(Console.ReadLine(), out ans))
		{
		//ansに値が入るまでTryParseを繰り返す
		Console.WriteLine("入力しなおしてください");
		}

		return (int)ans;

		}

		public static string ConvertCharListToString(List<char> ls)
		{
		return new String(ls.ToArray());
		}

		private static List<int> SplitData(string rawData)
		{
			List<string> strList = rawData.Split(' ').ToList();

			List<int> intList = strList.Select(int.Parse).ToList();
			//どうやたらint.Parse(要素)をセレクトしちゃってるらしい。見じけぇやべぇはぇえ

			return intList;
				}

	}
}