#include <bits/stdc++.h>
#define debug cout << "ok\n";
#define SQR(x) (1LL * ((x) * (x)))
#define MASK(i) (1LL << (i))
#define BIT(x, i) (((x) >> (i)) & 1)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define pli pair<ll,int>
#define vi vector<int>
#define FAST ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef unsigned int ui;
using namespace std;
const int M = 1e9 + 7;
const int INF = 1e9 + 7;
const ll INFLL = (ll)2e18 + 7LL;
const ld PI = acos(-1);
const int dx[] = {1, -1, 0, 0, -1, 1, 1, -1};
const int dy[] = {0, 0, 1, -1, -1, -1, 1, 1};
template<class _, class __>
bool minimize(_ &x, const __ y){
if(x >= y){
x = y;
return true;
} else return false;
}
template<class _, class __>
bool maximize(_ &x, const __ y){
if(x <= y){
x = y;
return true;
} else return false;
}
template<class _,class __>
void Add(_ &x, const __ y) {
x += y;
if (x >= M) {
x -= M;
}
return;
}
template<class _,class __>
void Diff(_ &x, const __ y) {
x -= y;
if (x < 0) {
x += M;
}
return;
}
//--------------------------------------------------------------
const int MaxN = 207;
int n,f[MaxN][MaxN],dp[MaxN][MaxN],len[MaxN];
pii trace[MaxN][MaxN];
char s[MaxN];
vi uoc[MaxN];
string ToStr(int a) {
string s;
while (a) {
s = (char)(a%10 + 48) + s;
a /= 10;
}
return s;
}
void prepare() {
memset(dp,0,sizeof(dp));
for (int i=1;i<=9;i++) len[i] = 3;
for (int i=10;i<=99;i++) len[i] = 4;
for (int i=100;i<=200;i++) len[i] = 5;
for (int i=1;i<=200;i++) {
for (int j=i;j<=200;j += i) {
uoc[j].pb(i);
}
}
for (int i=n;i>=1;i--) {
for (int j=n;j>=1;j--) {
if (s[i] == s[j]) dp[i][j] = dp[i+1][j+1] + 1;
}
}
}
string Get(int l,int r) {
string res;
if (trace[l][r].fi == 0) {
res.resize(r - l + 1);
for (int i=l;i<=r;i++) {
res[i-l] = s[i];
}
return res;
}
if (trace[l][r].fi == 1) {
res = Get(l,trace[l][r].se) + Get(trace[l][r].se+1,r);
return res;
}
res = ToStr(trace[l][r].se) + '(' + Get(l,l + (r - l + 1)/trace[l][r].se - 1) + ')';
return res;
}
bool check(int l,int r,int x) {
int leg = (r - l + 1)/x;
for (int i=l+leg;i<=r;i+=leg) {
if (dp[l][i] < leg) return false;
}
return true;
}
void sol() {
cin >> n;
for (int i=1;i<=n;i++) cin >> s[i];
prepare();
for (int i=0;i<n;i++) {
for (int l=1;l<=n-i;l++) {
int r = l + i;
f[l][r] = r - l + 1;
for (int j=l;j<r;j++) {
if (minimize(f[l][r],f[l][j] + f[j+1][r])) {
trace[l][r] = mp(1,j);
}
}
for (int x : uoc[r - l + 1]) {
if (check(l,r,x) && minimize(f[l][r],len[x] + f[l][l + (r-l+1)/x - 1])) {
trace[l][r] = mp(2,x);
}
}
}
}
cout << Get(1,n);
}
int main() {
// freopen("WSTRING.inp","r",stdin);
// freopen("WSTRING.out","w",stdout);
FAST
int t=1;
// cin >> t;
while (t--) sol();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGRlYnVnICAgICBjb3V0IDw8ICJva1xuIjsKI2RlZmluZSBTUVIoeCkgICAgKDFMTCAqICgoeCkgKiAoeCkpKQojZGVmaW5lIE1BU0soaSkgICAoMUxMIDw8IChpKSkKI2RlZmluZSBCSVQoeCwgaSkgKCgoeCkgPj4gKGkpKSAmIDEpCiNkZWZpbmUgZmkgICAgICAgIGZpcnN0CiNkZWZpbmUgc2UgICAgICAgIHNlY29uZAojZGVmaW5lIHBiICAgICAgICBwdXNoX2JhY2sKCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgcGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBwbGkgcGFpcjxsbCxpbnQ+CiNkZWZpbmUgdmkgdmVjdG9yPGludD4KCiNkZWZpbmUgRkFTVCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApO2Npbi50aWUoMCk7Y291dC50aWUoMCk7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxsOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1aTsKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTSA9IDFlOSArIDc7CmNvbnN0IGludCBJTkYgPSAxZTkgKyA3Owpjb25zdCBsbCBJTkZMTCA9IChsbCkyZTE4ICsgN0xMOwpjb25zdCBsZCBQSSA9IGFjb3MoLTEpOwoKY29uc3QgaW50IGR4W10gPSB7MSwgLTEsIDAsIDAsIC0xLCAxLCAxLCAtMX07CmNvbnN0IGludCBkeVtdID0gezAsIDAsIDEsIC0xLCAtMSwgLTEsIDEsIDF9OwoKdGVtcGxhdGU8Y2xhc3MgXywgY2xhc3MgX18+CiAgICBib29sIG1pbmltaXplKF8gJngsIGNvbnN0IF9fIHkpewogICAgICAgIGlmKHggPj0geSl7CiAgICAgICAgICAgIHggPSB5OwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgcmV0dXJuIGZhbHNlOwogICAgfQp0ZW1wbGF0ZTxjbGFzcyBfLCBjbGFzcyBfXz4KICAgIGJvb2wgbWF4aW1pemUoXyAmeCwgY29uc3QgX18geSl7CiAgICAgICAgaWYoeCA8PSB5KXsKICAgICAgICAgICAgeCA9IHk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSByZXR1cm4gZmFsc2U7CiAgICB9Cgp0ZW1wbGF0ZTxjbGFzcyBfLGNsYXNzIF9fPgogICAgdm9pZCBBZGQoXyAmeCwgY29uc3QgX18geSkgewogICAgICAgIHggKz0geTsKICAgICAgICBpZiAoeCA+PSBNKSB7CiAgICAgICAgICAgIHggLT0gTTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKdGVtcGxhdGU8Y2xhc3MgXyxjbGFzcyBfXz4KICAgIHZvaWQgRGlmZihfICZ4LCBjb25zdCBfXyB5KSB7CiAgICAgICAgeCAtPSB5OwogICAgICAgIGlmICh4IDwgMCkgewogICAgICAgICAgICB4ICs9IE07CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmNvbnN0IGludCBNYXhOID0gMjA3OwoKaW50IG4sZltNYXhOXVtNYXhOXSxkcFtNYXhOXVtNYXhOXSxsZW5bTWF4Tl07CnBpaSB0cmFjZVtNYXhOXVtNYXhOXTsKY2hhciBzW01heE5dOwp2aSB1b2NbTWF4Tl07CgpzdHJpbmcgVG9TdHIoaW50IGEpIHsKICAgIHN0cmluZyBzOwogICAgd2hpbGUgKGEpIHsKICAgICAgICBzID0gKGNoYXIpKGElMTAgKyA0OCkgKyBzOwogICAgICAgIGEgLz0gMTA7CiAgICB9CiAgICByZXR1cm4gczsKfQoKdm9pZCBwcmVwYXJlKCkgewogICAgbWVtc2V0KGRwLDAsc2l6ZW9mKGRwKSk7CiAgICBmb3IgKGludCBpPTE7aTw9OTtpKyspIGxlbltpXSA9IDM7CiAgICBmb3IgKGludCBpPTEwO2k8PTk5O2krKykgbGVuW2ldID0gNDsKICAgIGZvciAoaW50IGk9MTAwO2k8PTIwMDtpKyspIGxlbltpXSA9IDU7CiAgICBmb3IgKGludCBpPTE7aTw9MjAwO2krKykgewogICAgICAgIGZvciAoaW50IGo9aTtqPD0yMDA7aiArPSBpKSB7CiAgICAgICAgICAgIHVvY1tqXS5wYihpKTsKICAgICAgICB9CiAgICB9CiAgICBmb3IgKGludCBpPW47aT49MTtpLS0pIHsKICAgICAgICBmb3IgKGludCBqPW47aj49MTtqLS0pIHsKICAgICAgICAgICAgaWYgKHNbaV0gPT0gc1tqXSkgZHBbaV1bal0gPSBkcFtpKzFdW2orMV0gKyAxOwogICAgICAgIH0KICAgIH0KfQoKc3RyaW5nIEdldChpbnQgbCxpbnQgcikgewogICAgc3RyaW5nIHJlczsKICAgIGlmICh0cmFjZVtsXVtyXS5maSA9PSAwKSB7CiAgICAgICAgcmVzLnJlc2l6ZShyIC0gbCArIDEpOwogICAgICAgIGZvciAoaW50IGk9bDtpPD1yO2krKykgewogICAgICAgICAgICByZXNbaS1sXSA9IHNbaV07CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXM7CiAgICB9CiAgICBpZiAodHJhY2VbbF1bcl0uZmkgPT0gMSkgewogICAgICAgIHJlcyA9IEdldChsLHRyYWNlW2xdW3JdLnNlKSArIEdldCh0cmFjZVtsXVtyXS5zZSsxLHIpOwogICAgICAgIHJldHVybiByZXM7CiAgICB9CiAgICByZXMgPSBUb1N0cih0cmFjZVtsXVtyXS5zZSkgKyAnKCcgKyBHZXQobCxsICsgKHIgLSBsICsgMSkvdHJhY2VbbF1bcl0uc2UgLSAxKSArICcpJzsKICAgIHJldHVybiByZXM7Cn0KCmJvb2wgY2hlY2soaW50IGwsaW50IHIsaW50IHgpIHsKICAgIGludCBsZWcgPSAociAtIGwgKyAxKS94OwogICAgZm9yIChpbnQgaT1sK2xlZztpPD1yO2krPWxlZykgewogICAgICAgIGlmIChkcFtsXVtpXSA8IGxlZykgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCnZvaWQgc29sKCkgewogICAgY2luID4+IG47CiAgICBmb3IgKGludCBpPTE7aTw9bjtpKyspIGNpbiA+PiBzW2ldOwogICAgcHJlcGFyZSgpOwogICAgZm9yIChpbnQgaT0wO2k8bjtpKyspIHsKICAgICAgICBmb3IgKGludCBsPTE7bDw9bi1pO2wrKykgewogICAgICAgICAgICBpbnQgciA9IGwgKyBpOwogICAgICAgICAgICBmW2xdW3JdID0gciAtIGwgKyAxOwogICAgICAgICAgICBmb3IgKGludCBqPWw7ajxyO2orKykgewogICAgICAgICAgICAgICAgaWYgKG1pbmltaXplKGZbbF1bcl0sZltsXVtqXSArIGZbaisxXVtyXSkpIHsKICAgICAgICAgICAgICAgICAgICB0cmFjZVtsXVtyXSA9IG1wKDEsaik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yIChpbnQgeCA6IHVvY1tyIC0gbCArIDFdKSB7CiAgICAgICAgICAgICAgICBpZiAoY2hlY2sobCxyLHgpICYmIG1pbmltaXplKGZbbF1bcl0sbGVuW3hdICsgZltsXVtsICsgKHItbCsxKS94IC0gMV0pKSB7CiAgICAgICAgICAgICAgICAgICAgdHJhY2VbbF1bcl0gPSBtcCgyLHgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCBHZXQoMSxuKTsKfQoKaW50IG1haW4oKSB7Ci8vCWZyZW9wZW4oIldTVFJJTkcuaW5wIiwiciIsc3RkaW4pOwovLwlmcmVvcGVuKCJXU1RSSU5HLm91dCIsInciLHN0ZG91dCk7CglGQVNUCglpbnQgdD0xOwovLwljaW4gPj4gdDsKCXdoaWxlICh0LS0pIHNvbCgpOwp9Cg==