/*

RFL <3
The Feeling of Happiness

"In dreams begin responsibility"

*/


#include<bits/stdc++.h>

using namespace std;

#define sf scanf
#define pf printf
#define ll long long
#define fr(I,M,N) for(I=M;I<=N;I++)
#define fr_(I,M,N) for(I=M;I>=N;I--)
#define re return
#define sfn cin>>n
#define bal pf("bal\n")
#define pb push_back
#define ins insert
#define sz(X) X.size()
#define xx first
#define yy second
#define skip continue
#define memo(X,N) memset(X,N,sizeof(X))
#define all(X) X.begin(),X.end()
#define mp make_pair
#define pi acos(-1)


/*
#define nMX 5000000
#define pMX 500000
int pr[pMX+1],prnum[nMX+1];

int sieve()
{
    int i,j;
    for(i=1;i<=nMX;i++)
        prnum[i]=i+1;
    for(i=1;i<=nMX;i++)
        if(prnum[i]!=-1)
            for(j=2*prnum[i]-1;j<=nMX;j+=prnum[i])
                    prnum[j]=-1;
    j=0;
    for(i=1;i<=nMX;i++)
        if(prnum[i]!=-1)
            pr[++j]=prnum[i];
    re j;
}*/

/*ll m_ncr[10001][10001];
ll ncr(ll i,ll j)
{
    if(j==1) re i;
    if(i==j) re 1;
    if(m_ncr[i][j]!=-1) re m_ncr[i][j];
    re m_ncr[i][j]=ncr(i-1,j) + ncr(i-1,j-1);
}*/

/*ll m_fact[21];
ll fact(ll i)
{
    if(i==1 || i==0) re 1;
    if(m_fact[i]!=-1) re m_fact[i];
    re m_fact[i]=i*fact(i-1);
}*/


/*#define MX 200005
ll int arr[MX];
ll int tree[MX * 3];
void init(ll int node, ll int b, ll int e)
{
    if (b == e) {
        tree[node] = arr[b];
        return;
    }
    ll int Left = node * 2;
    ll int Right = node * 2 + 1;
    ll int mid = (b + e) / 2;
    init(Left, b, mid);
    init(Right, mid + 1, e);
    tree[node] = max(tree[Left], tree[Right]);
}
ll int query(ll int node, ll int b, ll int e, ll int i, ll int j)
{
    if (i > e || j < b)
        return -1e6;
    if (b >= i && e <= j)
        return tree[node];
    ll int Left = node * 2;
    ll int Right = node * 2 + 1;
    ll int mid = (b + e) / 2;
    ll int p1 = query(Left, b, mid, i, j);
    ll int p2 = query(Right, mid + 1, e, i, j);
    return max(p1, p2);
}
void updateRange(ll int node, ll int start, ll int endd, ll int l, ll int r, ll int val)
{
    // out of range
    if (start > endd or start > r or endd < l)
        return;

    // Current node is a leaf node
    if (start == endd)
    {
        // Add the difference to current node
        tree[node] += val;
        return;
    }

    // If not a leaf node, recur for children.
    ll int mid = (start + endd) / 2;
    updateRange(node*2, start, mid, l, r, val);
    updateRange(node*2 + 1, mid + 1, endd, l, r, val);

    // Use the result of children calls to update this node
    tree[node] = tree[node*2] + tree[node*2+1];
}*/


int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    ll int i,j,x,y,n,m,cnt=0,k,g,flg,t;
    string s;
    cin>>n;
    cin>>s;
    if(n%2)
    {
        cout<<"No";
        re 0;
    }
    string tt=s.substr(0, n/2);
    string ss=s.substr(n/2, n/2);
    if(ss==tt)
    {
        cout<<"Yes";
    }
    else
        cout<<"No";
}
