CF 1202D
void solve() {
int n;
cin >> n;
int lim = sqrt(2 * n);
int three = 0, seven = 0;
for (int i = lim; i <= 2 * n; ++i) {
if (i * (i - 1) <= 2 * n) {
three = i;
seven = n - (i * (i - 1) / 2);
} else {
break;
}
}
cout << "133"; // using 3 and 7 one by one in order to make the number controlled C(three, 2) + seven == n
for (int i = 0; i < seven; ++i) {
cout << "7";
}
for (int i = 0; i < three - 2; ++i) {
cout << "3";
}
cout << "7";
cout << "\n";
return;
}
CF 1200E
void solve() {
int n;
cin >> n;
string ans;
cin >> ans;
string sc;
function<void(string)> get_next = [&](string s) {
int len = s.size();
s = ')' + s;
int j = 0;
nxt[0] = nxt[1] = 0;
for (int i = 2; i <= len; ++i) {
while (j && s[j + 1] != s[i]) {
j = nxt[j];
}
if (s[i] == s[j + 1]) {
++j;
}
nxt[i] = j;
}
};
for (int i = 2; i <= n; ++i) {
cin >> sc;
int len = min(sc.size(), ans.size());
string cur = sc + "!@#$%^&*()WETUIOPPLKJHGFDDSSSDVBNMM<KJJHGFD" +
ans.substr(ans.size() - len, len);
get_next(cur);
for (int j = nxt[cur.size()]; j < sc.size(); ++j) {
ans += sc[j];
}
}
cout << ans << '\n';
return;
}