#include <bits/stdc++.h>
#include <random>

using namespace std;

typedef unsigned long long ull;
typedef long long ll;
typedef long double ld;
//#define int ll
typedef vector<char> vc;
typedef vector<vc> vvc;
typedef vector<vvc> vvvc;
typedef pair<int, int> pii;
typedef pair<pii, pii> piii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<pii> vpi;
typedef vector< vi > vvi;
typedef vector< vvi > vvvi;
typedef vector<short> vs;
typedef vector<vs> vvs;
typedef vector<vvs> vvvs;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef vector<vvl> vvvl;
typedef vector<ld> vld;
typedef vector<vld> vvld;
typedef vector<vvld> vvvld;
typedef vector<string> vst;
typedef vector<vst> vvst;
typedef pair<ld, ld> pld;

#define inmin(a, b) a = min(a, (b))
#define inmax(a, b) a = max(a, (b))
#define ALL(a) a.begin(),a.end()
#define RALL(a) a.rbegin(),a.rend()
#define sqr(x) ((x) * (x))
#define fori(i, n) for(int i = 0; i < int(n); ++i)
#define SZ(a) ((int)((a).size()))
#define triple(T) tuple<T, T, T>
#define quad(T) tuple<T, T, T, T>
#define watch(x) cerr << (#x) << " = " << (x) << endl;

#ifdef RUS_HOME
#define cerr cout
#else
#define cerr if (false) cerr
#endif

const double PI = 2 * acos(0.0);
#define rand shittttty_shit
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
mt19937_64 rng_64(chrono::steady_clock::now().time_since_epoch().count());

const string DIGITS = "0123456789";
const string ALPH = "abcdefghijklmnopqrstuvwxyz";


template <class T0, class T1>
inline ostream & operator << (ostream &out, pair<T0, T1> &a) {
    return out << "{" << a.first << ", " << a.second << "}";
}

template <class T0, class T1>
inline istream & operator >> (istream &in, pair<T0, T1> &a) {
    return in >> a.first >> a.second;
}

template <class T0, class T1, class T2>
inline ostream & operator << (ostream &out, tuple<T0, T1, T2> &a) {
    return out << "{" << get<0>(a) << ", " << get<1>(a) << ", " << get<2>(a) << "}";
}

template <class T0, class T1, class T2, class T3>
inline ostream & operator << (ostream &out, tuple<T0, T1, T2, T3> &a) {
    return out << "{" << get<0>(a) << ", " << get<1>(a) << ", " << get<2>(a) << ", " <<  get<3>(a) << "}";
}

template<class T>
inline ostream & operator << (ostream &out, vector<T> &a) {
    out << "[";
    fori (i, a.size())
        out << a[i] << vector<string>{", ", "]  "}[i + 1 == a.size()];
    return out;
}


void smain();



signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
#ifdef RUS_HOME
    freopen("input", "r", stdin);
    //freopen("output.txt", "w", stdout);
    clock_t start = clock();
#endif
    cout << setprecision(12) << fixed;
    smain();
#ifdef RUS_HOME
    cout << "\n\n\n\nTOTAL EXECUTION TIME: " << float( clock () - start ) /  CLOCKS_PER_SEC << endl;
#endif
    return 0;
}

const int MOD=1e9+7,N=1e5+1,M=4e5+100,oo=1e9,A=9;

int pn[N],cn[N],p[N],c[N],cnt[N];

void make_array(const string&s){
    int n=SZ(s);
    vi cnt(A);
    for(int i=0;i<n;i++)
        cnt[s[i]-'1']++;
    for(int i=1;i<A;i++)
        cnt[i]+=cnt[i-1];
    for(int i=0;i<n;i++)
        p[--cnt[s[i]-'1']]=i;
    c[p[0]]=0;
    int classes=1;
    for(int i=1;i<n;i++){
        if(s[p[i]]!=s[p[i-1]])
            classes++;
        c[p[i]]=classes-1;
    }
    for(int h=0;(1<<h)<n;h++){
        for(int i=0;i<n;i++){
            pn[i]=p[i]-(1<<h);
            if(pn[i]<0)
                pn[i]+=n;
        }
        vi cnt(classes);
        for(int i=0;i<n;i++)
            cnt[c[pn[i]]]++;
        for(int i=1;i<classes;i++)
            cnt[i]+=cnt[i-1];
        for(int i=n-1;i>=0;i--)
            p[--cnt[c[pn[i]]]]=pn[i];
        cn[p[0]]=0;
        classes=1;
        for(int i=1;i<n;i++){
            int mid1=(p[i]+(1<<h))%n,mid2=(p[i-1]+(1<<h))%n;
            if(c[p[i]]!=c[p[i-1]]||c[mid1]!=c[mid2])
                classes++;
            cn[p[i]]=classes-1;
        }
        for(int i=0;i<n;i++){
            c[i]=cn[i];
        }
    }
}

int k,umid,n,len;

bool check(){
    vi dp(n,oo);
    for(int i=0;i<n;i++){
        if(i<len-1){
            dp[i]=0;
            continue;
        }
        int v=i-len+1;
        if(c[v]<=umid){
            if(!v)
                dp[i]=0;
            else
                inmin(dp[i],dp[v-1]+1);
        }
        inmin(dp[i],dp[v]+1);
    }
    if(dp[n-1]<=k)
        return true;
    else
        return false;
}


void smain() {


    string s;
    cin>>k>>s;
    n=SZ(s);
    if(n%(k+1)==0){
        int len=n/(k+1);
        string mx;
        for(int i=0;i<n;i+=len){
            string t;
            for(int j=0;j<len;j++){
                t+=s[i+j];
            }
            if(!i)
                mx=t;
            else
                inmax(mx,t);
        }
        cout<<mx;
        return;
    }
    make_array(s);
    len=n/(k+1)+1;
    vi kek;
    for(int i=0;i<n;i++){
        if(p[i]<n-len+1)
            kek.push_back(p[i]);
    }
    int l=-1,r=SZ(kek);
    while(l+1<r){
        int mid=l+r>>1;
        umid=c[kek[mid]];
        if(check())
            r=mid;
        else
            l=mid;
    }
    int ans=kek[r];
    for(int i=0;i<len;i++){
        cout<<s[ans+i];
    }


}



Measured memory_bytes: 5944