There are two strings \(s\) and
\(t\), consisting only of letters
a
and b
. You can make the following operation
several times: choose a prefix of \(s\), a prefix of \(t\) and swap them. Prefixes can be
empty, also a prefix can coincide with a whole string.
Your task is to find a sequence of operations after which one of the
strings consists only of a
letters and the other consists
only of b
letters. The number of operations should be
minimized, but solutions that find non-optimal sequences will still get
some points. Read the scoring section for more detailed information.
The first line contains a string \(s\) (\(1 \leq |s| \leq 2 \cdot 10 ^ 5\)).
The second line contains a string \(t\) (\(1 \leq |t| \leq 2 \cdot 10 ^ 5\)).
Here \(|s|\) and \(|t|\) denote the lengths of \(s\) and \(t\), respectively. It is guaranteed that at
least one of the strings contains at least one a
letter and
at least one of the strings contains at least one b
letter.
The first line should contain a single integer \(n\) (\(0 \leq n \leq 5 \cdot 10 ^ 5\))—the number of operations.
Each of the next \(n\) lines should contain two space-separated integers \(a_i\), \(b_i\)—the lengths of prefixes of \(s\) and \(t\) to swap, respectively.
If there are multiple possible solutions, you can print any of them.
Let \(n\) be the length of your sequence, and \(m\) be the length of some optimal sequence.
If for all tests of the group \(n = m\), you will get \(100\%\) of the score of this group.
If for all tests of the group \(n \leq m + 2\), you will get \(70\%\) of the score of this group (rounded down to the nearest integer).
If for all tests of the group \(n \leq 2m + 2\), you will get \(50\%\) of the score of this group (rounded down to the nearest integer).
If for all tests of the group \(n \leq 5 \cdot 10 ^ 5\), you will get \(30\%\) of the score of this group (rounded down to the nearest integer).
If for at least one test you output \(n
> 5 \cdot 10 ^ 5\), you will get WA
and \(0\) points for this group.
Subtask | Score | Constraints | Comment |
---|---|---|---|
0 | 0 | — | Tests from the statement |
1 | 5 | \(1 \leq |s|, |t| \leq 6\) | \(s\)
and \(t\) combined contain exactly one
letter a |
2 | 10 | \(1 \leq |s|, |t| \leq 6\) | — |
3 | 20 | \(1 \leq |s|, |t| \leq 50\) | — |
4 | 20 | \(1 \leq |s|, |t| \leq 250\) | — |
5 | 20 | \(1 \leq |s|, |t| \leq 2000\) | — |
6 | 25 | \(1 \leq |s|, |t| \leq 2 \cdot 10 ^ 5\) | — |
bab bb
2 1 0 1 3
bbbb aaa
0
In the first example, you can solve the problem in two operations:
Swap the prefix of the first string with length \(1\) and the prefix of the second string
with length \(0\). After this swap,
you’ll have strings ab
and bbb
.
Swap the prefix of the first string with length \(1\) and the prefix of the second string
with length \(3\). After this swap,
you’ll have strings bbbb
and a
.
In the second example, the strings are already appropriate, so no operations are needed.