Problem:
Score : 100 points

Problem Statement

You are given three strings A, B and C. Check whether they form a word chain.

More formally, determine whether both of the following are true:

The last character in A and the initial character in B are the same.

The last character in B and the initial character in C are the same.

If both are true, print YES. Otherwise, print NO.

Constraints

A, B and C are all composed of lowercase English letters (a - z).

1 ≤ |A|, |B|, |C| ≤ 10, where |A|, |B| and |C| are the lengths of A, B and C, respectively.

Input

Input is given from Standard Input in the following format:

A B C

Output

Print YES or NO.

Sample Input 1

rng gorilla apple

Sample Output 1

YES

They form a word chain.

Sample Input 2

yakiniku unagi sushi

Sample Output 2

NO

A and B form a word chain, but B and C do not.

Sample Input 3

a a a

Sample Output 3

YES

Sample Input 4

aaaaaaaaab aaaaaaaaaa aaaaaaaaab

Sample Output 4

NO

Solution in C# (Mono 4.6.2.0) (judge verdict: Runtime Error)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ABC060SimpleKnapsack
{
    class Program
    {
        static void Main(string[] args)
        {
            int N, W;
            string[] vals = Console.ReadLine().Split(' ');
            N = int.Parse(vals[0]);
            W = int.Parse(vals[1]);

            int[] w = new int[N + 1];
            int[] v = new int[N + 1];

            for(int i=1; i <= N; i++)
            {
                vals = Console.ReadLine().Split(' ');
                w[i] = int.Parse(vals[0]);
                v[i] = int.Parse(vals[1]);
            }


            W = W / (w[1] + 3) * 3;
            
            for(int i=1; i <= N; i++)
            {
                w[i] -= w[1];
            }

             
            int[,] dp = new int[N + 1, W + 1];
            //int[,] dp = new int[N + 1, 3 * N + 1];


            for (int i = 1; i <= N; i++)
            {
                for(int j = 1; j <= W; j++)
                {
                    dp[i,j] = dp[i-1,j];
                    if(w[i] > j)
                    {
                        continue;
                    }
                    if(dp[i-1, j-w[i]] + v[i] > dp[i-1, j])
                    {
                        dp[i, j] = dp[i - 1, j - w[i]] + v[i];
                    }
                }
            }

            Console.WriteLine(dp[N, W]);
        }
    }
}