#include <bits/stdc++.h>
using namespace std;
string s;
unordered_map<string,string> memo;
bool isRepeat(const string &t, string &sub, int &cnt) {
int n = t.size();
for (int len = 1; len <= n/2; len++) {
if (n % len != 0) continue;
string x = t.substr(0, len);
bool ok = true;
for (int i = len; i < n; i += len) {
if (t.substr(i, len) != x) { ok = false; break; }
}
if (ok) {
sub = x;
cnt = n / len;
return true;
}
}
return false;
}
string solve(string t) {
if (memo.count(t)) return memo[t];
int n = t.size();
if (n == 0) return "";
if (n == 1) return t;
string best = t; // raw
// thử nén bằng dạng k(sub)
string sub;
int cnt;
if (isRepeat(t, sub, cnt)) {
string subEnc = solve(sub);
string cand = to_string(cnt) + "(" + subEnc + ")";
if (cand.size() < best.size()) best = cand;
}
// thử cắt t thành 2 phần bất kì và nén riêng từng phần
for (int i = 1; i < n; i++) {
string left = solve(t.substr(0, i));
string right = solve(t.substr(i));
string cand = left + right;
if (cand.size() < best.size()) best = cand;
}
return memo[t] = best;
}
int main() {
freopen("wstring.inp", "r", stdin);
freopen("wstring.out", "w", stdout);
int n; cin >> n;
cin >> s;
cout << solve(s);
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJpbmcgczsKdW5vcmRlcmVkX21hcDxzdHJpbmcsc3RyaW5nPiBtZW1vOwoKYm9vbCBpc1JlcGVhdChjb25zdCBzdHJpbmcgJnQsIHN0cmluZyAmc3ViLCBpbnQgJmNudCkgewogICAgaW50IG4gPSB0LnNpemUoKTsKICAgIGZvciAoaW50IGxlbiA9IDE7IGxlbiA8PSBuLzI7IGxlbisrKSB7CiAgICAgICAgaWYgKG4gJSBsZW4gIT0gMCkgY29udGludWU7CiAgICAgICAgc3RyaW5nIHggPSB0LnN1YnN0cigwLCBsZW4pOwogICAgICAgIGJvb2wgb2sgPSB0cnVlOwogICAgICAgIGZvciAoaW50IGkgPSBsZW47IGkgPCBuOyBpICs9IGxlbikgewogICAgICAgICAgICBpZiAodC5zdWJzdHIoaSwgbGVuKSAhPSB4KSB7IG9rID0gZmFsc2U7IGJyZWFrOyB9CiAgICAgICAgfQogICAgICAgIGlmIChvaykgewogICAgICAgICAgICBzdWIgPSB4OwogICAgICAgICAgICBjbnQgPSBuIC8gbGVuOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KCnN0cmluZyBzb2x2ZShzdHJpbmcgdCkgewogICAgaWYgKG1lbW8uY291bnQodCkpIHJldHVybiBtZW1vW3RdOwogICAgaW50IG4gPSB0LnNpemUoKTsKICAgIGlmIChuID09IDApIHJldHVybiAiIjsKICAgIGlmIChuID09IDEpIHJldHVybiB0OwoKICAgIHN0cmluZyBiZXN0ID0gdDsgLy8gcmF3CgogICAgLy8gdGjhu60gbsOpbiBi4bqxbmcgZOG6oW5nIGsoc3ViKQogICAgc3RyaW5nIHN1YjsKICAgIGludCBjbnQ7CiAgICBpZiAoaXNSZXBlYXQodCwgc3ViLCBjbnQpKSB7CiAgICAgICAgc3RyaW5nIHN1YkVuYyA9IHNvbHZlKHN1Yik7CiAgICAgICAgc3RyaW5nIGNhbmQgPSB0b19zdHJpbmcoY250KSArICIoIiArIHN1YkVuYyArICIpIjsKICAgICAgICBpZiAoY2FuZC5zaXplKCkgPCBiZXN0LnNpemUoKSkgYmVzdCA9IGNhbmQ7CiAgICB9CgogICAgLy8gdGjhu60gY+G6r3QgdCB0aMOgbmggMiBwaOG6p24gYuG6pXQga8OsIHbDoCBuw6luIHJpw6puZyB04burbmcgcGjhuqduCiAgICBmb3IgKGludCBpID0gMTsgaSA8IG47IGkrKykgewogICAgICAgIHN0cmluZyBsZWZ0ID0gc29sdmUodC5zdWJzdHIoMCwgaSkpOwogICAgICAgIHN0cmluZyByaWdodCA9IHNvbHZlKHQuc3Vic3RyKGkpKTsKICAgICAgICBzdHJpbmcgY2FuZCA9IGxlZnQgKyByaWdodDsKICAgICAgICBpZiAoY2FuZC5zaXplKCkgPCBiZXN0LnNpemUoKSkgYmVzdCA9IGNhbmQ7CiAgICB9CgogICAgcmV0dXJuIG1lbW9bdF0gPSBiZXN0Owp9CgppbnQgbWFpbigpIHsKICAgICAgICBmcmVvcGVuKCJ3c3RyaW5nLmlucCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3Blbigid3N0cmluZy5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICBpbnQgbjsgY2luID4+IG47ICAgIAogICAgY2luID4+IHM7CiAgICBjb3V0IDw8IHNvbHZlKHMpOwp9Cg==