var i,m,n:longint; t:array[0..1025]of char; s,sflag:ansistring;
procedure solve(l,r:longint;var s,sflag:ansistring);
var mid:longint; s1,s2,s1f,s2f:ansistring;
 begin

   if l=r then if t[l]='1' then begin s:='I'; sflag:='I'; exit; end else begin s:='B'; sflag:='B'; exit; end;
   mid:=(l+r)div 2;
   solve(l,mid,s1,s1f);
   solve(mid+1,r,s2,s2f);
   if (s1f='I')and(s2f='I') then sflag:='I' else
   if (s1f='B')and(s2f='B') then sflag:='B' else sflag:='F';
   s:=s1+s2+sflag;

 end;



begin
  
  readln(n);m:=trunc(exp(ln(2)*n));
  for i:=1 to m do
   read(t[i]);
  solve(1,m,s,sflag);
 writeln(s);
 close(input);
   close(output);
end.

/**************************************************************
	Problem: 2246
	User: admin
	Language: Pascal
	Result: Wrong Answer
****************************************************************/