#include <bits/stdc++.h>
using namespace std;
#define int int64_t
constexpr int MOD = 1e9 + 7;
int p, t;
inline void solve() {
string s;
cin >> s;
string ans;
vector<pair<int, int>> rng(s.size() + 1, {0, 0});
for (int i = 1; i <= s.size(); i++) {
if (s[i - 1] == '(') {
rng[i] = {rng[i - 1].first + 1, rng[i - 1].second + 2};
} else {
rng[i] = {max(rng[i - 1].first - 2, int(0)), rng[i - 1].second - 1};
if (rng[i].second < 0)
goto impossible;
}
}
if (rng.back().first > 0)
goto impossible;
{
bool lasti = false;
bool lastj = false;
int curd = 0;
for (int i = s.size() - 1; i >= 0; i--) {
if (s[i] == '(') {
if (curd - 2 >= rng[i].first) {
ans.push_back('G');
curd -= 2;
} else {
ans.push_back(lasti ? 'B' : 'R');
curd--;
lasti = lasti ? false : true;
}
} else {
if (curd + 2 <= rng[i].second) {
curd += 2;
ans.push_back('G');
} else {
ans.push_back(lastj ? 'B' : 'R');
curd++;
lastj = lastj ? false : true;
}
}
}
}
reverse(ans.begin(), ans.end());
cout << ans << '\n';
return;
impossible:
cout << "impossible\n";
return;
}
inline void solve1() {
while (t--)
solve();
}
inline void solve2() {
vector<vector<int>> dp1(610, vector<int>(610, 0));
vector<vector<int>> dp2(610, vector<int>(610, 0));
dp1[0][0] = 1;
int cur = 0;
auto iterate = [&]() -> void {
for (int j = 0; j < 610; j++) {
for (int k = j; k < 610; k++) {
if (j + 2 < 610 && k + 1 < 610)
dp2[j][k] += dp1[j + 2][k + 1];
if (j == 0 && k + 1 < 610) {
dp2[j][k] += dp1[j + 1][k + 1];
dp2[j][k] += dp1[j][k + 1];
}
if (j - 1 >= 0 && k - 2 >= 0)
dp2[j][k] += dp1[j - 1][k - 2];
dp2[j][k] %= MOD;
}
}
swap(dp1, dp2);
for (int i = 0; i < 610; i++)
fill(dp2[i].begin(), dp2[i].end(), 0);
cur++;
};
vector<pair<int, int>> queries(t);
vector<int> ans(t, 0);
for (int i = 0; i < t; i++) {
cin >> queries[i].first;
queries[i].second = i;
}
sort(queries.begin(), queries.end());
for (int i = 0; i < t; i++) {
while (cur < queries[i].first)
iterate();
int anss = 0;
for (int i = 0; i < 610; i++)
anss += dp1[0][i];
anss %= MOD;
ans[queries[i].second] = anss;
}
copy(ans.begin(), ans.end(), ostream_iterator<int>(cout, "\n"));
}
signed main() {
cin.tie(0)->sync_with_stdio(0);
cin >> p >> t;
if (p == 2)
solve2();
else
solve1();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |