After a long day, Alice and Bob decided to play a little game. The game board consists of $n$ cells in a straight line, numbered from $1$ to $n$, where each cell contains a number $a_i$ between $1$ and $n$. Furthermore, no two cells contain the same number.
A token is placed in one of the cells. They take alternating turns of moving the token around the board, with Alice moving first. The current player can move from cell $i$ to cell $j$ only if the following two conditions are satisfied:
- the number in the new cell $j$ must be strictly larger than the number in the old cell $i$ (i.e. $a_j > a_i$), and
- the distance that the token travels during this turn must be a multiple of the number in the old cell (i.e. $|i-j|\bmod a_i = 0$).
Whoever is unable to make a move, loses. For each possible starting position, determine who wins if they both play optimally. It can be shown that the game is always finite, i.e. there always is a winning strategy for one of the players.
Input
The first line contains a single integer $n$ ($1 \le n \le 10^5$) — the number of numbers.
The second line contains $n$ integers $a_1, a_2, \ldots, a_n$ ($1 \le a_i \le n$). Furthermore, there are no pair of indices $i \neq j$ such that $a_i = a_j$.
Output
Print $s$ — a string of $n$ characters, where the $i$-th character represents the outcome of the game if the token is initially placed in the cell $i$. If Alice wins, then $s_i$ has to be equal to “A”; otherwise, $s_i$ has to be equal to “B”.
Examples
input
8
3 6 5 4 2 7 1 8
output
BAAAABAB
input
15
3 11 2 5 10 9 7 13 15 8 4 12 6 1 14
output
ABAAAABBBAABAAB
Note
In the first sample, if Bob puts the token on the number (not position):
- $1$: Alice can move to any number. She can win by picking $7$, from which Bob has no move.
- $2$: Alice can move to $3$ and $5$. Upon moving to $5$, Bob can win by moving to $8$. If she chooses $3$ instead, she wins, as Bob has only a move to $4$, from which Alice can move to $8$.
- $3$: Alice can only move to $4$, after which Bob wins by moving to $8$.
- $4$, $5$, or $6$: Alice wins by moving to $8$.
- $7$, $8$: Alice has no move, and hence she loses immediately.
Solution:
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<int> a(n), pos(n); for (int i = 0; i < n; i++) { cin >> a[i]; a[i]--; pos[a[i]] = i; } string win(n, '?'); for (int x = n - 1; x >= 0; x--) { int i = pos[x]; win[i] = 'B'; int j = i; while (true) { j -= (x + 1); if (j < 0) { break; } if (win[j] == 'B') { win[i] = 'A'; break; } } j = i; while (true) { j += (x + 1); if (j >= n) { break; } if (win[j] == 'B') { win[i] = 'A'; break; } } } cout << win << '\n'; return 0; }