Problem:
Score : 200 points

Problem Statement

Given are a positive integer N and a string S of length N consisting of lowercase English letters.

Determine whether the string is a concatenation of two copies of some string.
That is, determine whether there is a string T such that S = T + T.

Constraints

1 \leq N \leq 100

S consists of lowercase English letters.

|S| = N

Input

Input is given from Standard Input in the following format:

N
S

Output

If S is a concatenation of two copies of some string, print Yes; otherwise, print No.

Sample Input 1

6
abcabc

Sample Output 1

Yes

Let T = abc, and S = T + T.

Sample Input 2

6
abcadc

Sample Output 2

No

Sample Input 3

1
z

Sample Output 3

No

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using static System.Console;
using static System.Math;

class Program
{
    static void Main()
    {
        var N = int.Parse(ReadLine());
        if (N % 2 == 1)
        {
            WriteLine("No");
            return;
        }
        var S = ReadLine();
        var b = true;
        for (int i = 0; i < N / 2; i++)
        {
            if (S[i] != S[i + N / 2]) b = false;
        }
        WriteLine(b ? "Yes" : "No");

    }
}

public class NextPermutation
{
    int[] perm;
    public int Length => perm.Length;

    public NextPermutation(int N)
    {
        perm = new int[N];
        for (int i = 0; i < perm.Length; i++)
        {
            perm[i] = i;
        }
    }

    public NextPermutation(int[] init)
    {
        perm = init;
    }

    public int this[int i]
    {
        get
        {
            return perm[i];
        }
    }

    public bool Next()
    {
        var l = 0;
        for (int i = perm.Length - 2; i >= 0; i--)
        {
            if (perm[i] < perm[i + 1])
            {
                l = i;
                break;
            }
        }

        var v = perm[l];
        var r = 0;
        for (int i = perm.Length - 1; i >= 0; i--)
        {
            if (perm[i] > v)
            {
                r = i;
                break;
            }
        }

        if (l == 0 && r == 0) return false;
        Swap(ref perm[l++], ref perm[r]);
        Array.Reverse(perm, l, perm.Length - l);
        return true;
    }

    static void Swap<T>(ref T l, ref T r)
    {
        var t = l;
        l = r;
        r = t;
    }
}