Problem:
Problem E: 足し算ゲーム

ねこのファーブルは足し算を用いた簡単なゲームを思いつき、同じくねこで友達のオードリーと一緒にやってみることにした。

ゲームのルールは次のようなものである。まず最初に、適当な正の整数を選び、そこからスタートする。各プレーヤーは、その数のうち隣り合う2つの桁を選択して和を計算し、もとの2つの数字と置き換える。たとえば、「1234」の十の位と百の位を選ぶと、次の数は「154」となる。「5555」の十の位と百の位を選んだ場合は「5105」となる。このような操作を数が1桁になるまで交互に繰り返し、操作ができなくなったプレーヤーが負けとなる。

ゲーム開始時の整数の値が与えられる。先攻であるファーブルと後攻であるオードリーがいずれも最適な戦略を取るとき、どちらが勝つのかを判定するプログラムを作成せよ。

Input

入力は、ゲーム開始時の数を表す1000桁以下の正の整数が1つ書かれた1行のみからなる。なお、最上位の桁は0ではない。

Output

ファーブルが勝つなら "Fabre wins."、オードリーが勝つなら "Audrey wins." と1行に出力せよ。最後にピリオドをつける必要があることに注意すること。

Notes on Submission

上記形式で複数のデータセットが与えられます。入力データの 1 行目にデータセットの数が与えられます。各データセットに対する出力を上記形式で順番に出力するプログラムを作成して下さい。

Sample Input

3
1234
5555
9

Output for the Sample Input

Audrey wins.
Fabre wins.
Audrey wins.

Solution in C++ (judge verdict: Accepted)

#include<iostream>
#include<sstream>

using namespace std;
string tmp,str;
int num,ans[2],n;

string i2s(int num){
  string str;
  stringstream s;
  s<<num;
  s>>str;
  return str;
}
  
void dfs(string str,int cnt){
  if(str.size()==1){
    ans[cnt%2]=1;
    return;
  }
  tmp="";
  num=(str[0]-'0')+(str[1]-'0');
  tmp+=i2s(num);
  if(str.size()>2)tmp+=str.substr(2,str.size()-2);
  dfs(tmp,cnt+1);
}
int main(){
  cin>>n;
  while(n--){
    ans[0]=ans[1]=0;
    string str;
    cin>>str;
    dfs(str,0);
    if(!ans[0]) cout<<"Fabre wins."<<endl;
    else cout<<"Audrey wins."<<endl;
    
  }
  return 0;
}