Description

KI十分喜欢美丽而优雅的斐波那契数列,最近他新认识了一种斐波那契字符串,定义如下

f (0) = b, f (1) = a,

f (2) = f (1) + f (0) = ab,

f (3) = f (2) + f (1) = aba,

f (4) = f (3) + f (2) = abaab,

......

KI想知道 f (n) 中的第 m 位是什么,你可以帮他解决这个问题吗?

 

 

 

Input

第一行有一个整数 T ,表示测试组数。

接下来的每个测试组包含两个数 n, m 

数据范围: T 1000, 0  n  90, 1  m  1e18

Output

对于每个测试组,输出’a’或者’b’

Sample Input

5
4 1
5 3
10 22
22 233
66 2333333333333

Sample Output

a
a
a
b
a

 

 

 

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
const int N=1000;

long long int f[N];
void init()
{
    f[0]=1;
    f[1]=1;
    for(int i=2;i<=90;i++)
    {
        f[i]=f[i-1]+f[i-2];
    }
}
void dfs(long long int n,long long int m)
{
    if(n==1)
    {
        puts("a");
        return;
    }
    if(n==2)
    {
        if(m==1)
            puts("a");
        else puts("b");
        return;
    }
    if(m>f[n-1]) dfs(n-2,m-f[n-1]);
    else dfs(n-1,m);
}

int main(){
    int t;
    scanf("%d",&t);
    init();
    while(t--){
        long long int n,m;
        scanf("%lld %lld",&n,&m);
        dfs(n,m);

    }
}