RT
#include<iostream>
using namespace std;
int n,a[1500];
bool b,i;
struct node{
char fbi;
int len;
node* son1;
node* son2;
};
node* buildtree(int l,int r)
{
node tmp,tmp1,tmp2;
node* s=&tmp;
s->son1=&tmp1;
s->son2=&tmp2;
s->len=r-l+1;
if(s->len==1)
{
if(a[l]==0)
{
s->fbi='b';
}
else
{
s->fbi='i';
}
}
b=false;
i=false;
for(int j=l;j<=r;j++)
{
if(a[j]==0) b=true;
else i=true;
}
if(b&&i)
{
s->fbi='f';
s->son1=buildtree(l,(l+r-1)/2);
s->son2=buildtree((l+r-1)/2,r);
}
else if(b)
{
s->fbi='b';
}
else
{
s->fbi='i';
}
return s;
}
void print(node* s)
{
if(s->fbi=='b')
{
for(int j=1;j<=s->len;j++)
{
cout<<"B";
}
}
else if(s->fbi=='i')
{
for(int j=1;j<=s->len;j++)
{
cout<<"I";
}
}
else
{
print(s->son1);
print(s->son2);
cout<<"F";
}
}
int main()
{
cin>>n;
int n2=1<<n;
for(int j=1;j<=n2;j++)
{
char c;
cin>>c;
a[j]=c-'0';
if(a[j]==0) b=true;
else i=true;
}
if(b&&i)
{
node* f;
f=buildtree(1,n2);
print(f);
}
else if(b)
{
int len2=2<<(n+1)-1;
for(int j=1;j<=len2;j++)
{
cout<<"B";
}
}
else
{
int len2=1<<(n+1)-1;
for(int j=1;j<=len2;j++)
{
cout<<"I";
}
}
return 0;
}