#include <bits/stdc++.h>
#define ll long long
//#define P pair<int,int>
#define uint unsigned int
using namespace std;

int gs(int x){
    return (1+x)*x/2;
}
int main(){
    int a,b,n;
    while(cin>>n>>a>>b){
        if(a>b) swap(a,b);
        int ans =1; int mid;
        n>>=1; int tot =1;
        while(a%2==0 || b-a>1){ ++ans;
            a = a-a/2;
            b=b-b/2;
            n>>=1; ++tot;
        }// cout<<ans<<tot<<endl;
        while(n>1){n>>=1; ++tot;}
        if(tot==ans) cout<<"Final!\n";
        else cout<<ans<<endl;
    }
    return 0;
}

#include <iostream>

using namespace std;

int main()
{
    int n;
    int a;
    int b;
    cin>>n;
    cin>>a;
    cin>>b;
    --a;
    --b;
    if(a>b)
    {
        a=a+b;
        b=a-b;
        a=a-b;
    }
    int k=1;
    int i=0;
    bool check = true;
    while(a!=b)
    {
        a/=2;
        b/=2;
        ++i;
        k*=2;
    }
    if(k==n)
    {
        cout<<"Final!";
    }else
    {
        cout<<i;
    }
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define dl double
#define llu unsigned long long int
#define scll(x) scanf("%lld",&x)
#define scd(x) scanf("%lf",&x)
#define sclu(x) scanf("%llu",&x)
#define scch(x) scanf(" %c",&x)
#define pb(x) push_back(x)
#define pf(x) push_front(x)
#define ppb(x) pop_back(x)
#define ppf(x) pop_front(x)
#define Pi acos(-1.0)
ll  _xor(ll a,ll b){return a^b;}
ll _and(ll a,ll b){return a&b;}
ll _or(ll a,ll b){return a|b;}
ll _not(ll a){ return ~a;}
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
ll ai[1000],pi[2005];
int main()
{
           #ifndef ONLINE_JUDGE
         freopen("input_cf.txt","r",stdin);
         freopen("output_cf.txt","w",stdout);
         #endif
    ll b,c=0,x,y,z,t,i=2,j,k,l1=0,l2=0,m,n,c1=0,c2=0,q,f=0,ans=0,a;
               scll(n);
               scll(a);
               scll(b);
               while((a-1)/i!=(b-1)/i)
               {
               	i=i*2;
               	c++;
               }
               if(i==n)
               	cout<<"Final!";
               else
               	cout<<c+1;
return 0;
}

#include <bits/stdc++.h>
using namespace std;

int it[100010], leaf[100010];

void build(int i, int l, int r){
    if (l == r){
        it[l] = i;
        return;
    }
    build(2*i, l, (l+r)/2);
    build(2*i+1, (l+r)/2+1, r);
}

int main(){
    int n,a,b;
    scanf("%d%d%d", &n, &a, &b);
    --a; --b;

    for (int i = 0; i < 300; i++) it[i] = i/2;
    build(1,0,n-1);

    int i = 0;
    int xa = it[a], xb = it[b];
    while (xa != xb){
        xa /= 2;
        xb /= 2;
        i++;
    }

    if (i == log2(n)) cout << "Final!"; else cout << i;

    return 0;
}

#include "bits/stdc++.h"
#define lli long long int
using namespace std;

void solve() {
    int n,a,b;
    cin >> n >> a >> b;
    if(b>a) {
        swap(a,b);
    }
    if(b <= n/2 && a > n/2) {
        cout << "Final!";
    }
    else {
        int ans = 0;
        while(1) {
            a = ceil(a/2.0);
            b = ceil(b/2.0);
            ans++;
            if(a <= b) {
                break;
            }
        }
        cout << ans;
    }
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    lli t = 1;
    // cin >> t;
    while(t--) {
        solve();
    }
    return 0;
}

#include<iostream>
#pragma warning(disable:4996)
#include<string>
#include<vector>
#include<set>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<deque>
#include<map>
#include<iomanip>
#include<stack>

//define

#define lg long long
#define vi vector<int>
#define si set<int>
#define vvi vector<vector <int> >

using namespace std;

int main() {
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int n, a, b;
	cin >> n >> a >> b;
	a--;
	b--;
	int counter = 0;
	while (a != b) {
		a /= 2;
		b /= 2;
		counter++;
	}
	if (pow(2, counter) == n) {
		cout << "Final!";
	}
	else cout << counter;

	//system("pause");
	return 0;

}

#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define mp make_pair
#define yes puts("YES")
#define no puts("NO")

const int INF = INT_MAX;
const int MAXN = (int) 1e5 + 5;
const int MOD = (int) 1e9 + 7;

void solve() {
	int n, a, b;
	cin >> n >> a >> b;
	a--;
	b--;
	if (a > b) swap(a, b);
	int ans = 1;
	while (n != 2) {
		if (a / 2 == b / 2) {
			cout << ans;
			return;
		}
		n /= 2;
		a /= 2;
		b /= 2;
		ans++;
	}
	cout << "Final!";
}

int main() {
//	freopen("in.txt", "r", stdin);
	solve();
	return 0;
}

#include<bits/stdc++.h>
using namespace std;
int n,p,i,t,fin,a,b,j,k;
int main()
{
    cin>>n>>a>>b;
    p=n;
    if(a>b){ t=a; a=b; b=t; }

    while(1)
    {
       n/=2;
       i++;
       if(n==1)
            break;
    }
    fin=i;
    while(1)
    {
        if( a==p||(a<p&&b>p))
        {
            i++;
          if(i==fin)
                cout<<"Final!";
          else
              cout<<i;
          return 0;
        }
        else if(a>p)
        {
            j=p;
            p=(p+k)/2;
        }
        else
        {
            k=p;
            p=(p+j)/2;
        }
        i--;
    }
}

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,a,b,d=0;cin>>n>>a>>b;a--;b--;
	while(a!=b){a=a/2,b=b/2,n=n/2,d++;}
	if(n==1)cout<<"Final!";
	else cout<<d;
}

#include<bits/stdc++.h>
using namespace std;
int sub(int a,int b)
{
    if(a>=b)
        return a-b;
    else
        return b-a;
}
int main()
{
    int n,a,b,i,j,k,l,m,p;
    scanf("%d %d %d",&n,&a,&b);
    l=m=0;
    if(n==2)
        printf("Final!\n");
    else{
    if(a<=2&&b<=2)
        printf("1\n");
    else
    {
   p=n/2;
   a--;
   b--;
   if(a>b)
   swap(a,b);
   if((a<p)&&(b>=p))
     printf("Final!");
    else
   {

       while(a!=b)
       {
           a=a/2;
   b=b/2;
           l++;

       }
       printf("%d\n",l);
   }

    }
    }
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
int a,b,n;
int fun(int s,int e)
{
	if((a<=(s+e)/2&&b>(s+e)/2)||(b<=(s+e)/2&&a>(s+e)/2)) return 1;
	else if(a<=(s+e)/2&&b<=(s+e)/2) return fun(s,(s+e)/2)+1;
	else return fun((s+e)/2,e)+1;
}
int main()
{
	ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin>>n>>a>>b;
	a=fun(0,n);b=0;
	while(n>0)
	{
	     n=n/2;
	     b++;
	}
	if(a==1) cout<<"Final!";
	else cout<<b-a;
}

//control+option+n to run!
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define ll long long
#define FOR(i, a, b) for (ll i = (a); i < (b); i++)
#define NEGFOR(i, a, b) for (ll i = (a); i > (b); i--)
#define vll vector<long long>
#define sll set<long long>
#define ld long double
#define inf 1000000000000000000
#define mll multiset<long long>
#define nn << "\n"
#define F(i, b) for (ll i = 0; i < b; i++)
//10^8 operations per second
//greatest int is 2,147,483,647
//greates long long is 9.22337204e18

//ALL FUNCTIONS SHOULD BE LL!!!!
long long power(long long a, long long b)
{
    if (b == 0)
        return 1;
    long long res = power(a, b / 2);
    if (b % 2)
        return res * res * a;
    else
        return res * res;
}

ll log(ll base, ll number)
{

    int x = base;
    int count = 1;
    while (base < number)
    {
        base *= x;
        count++;
    }
    return count;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    ll n, a, b;
    cin >> n >> a >> b;
    ll fakea = a;
    ll fakeb = b;

    a = min(fakea, fakeb);
    b = max(fakea, fakeb);
    ll co = 1;
    while (!(a + 1 == b && a % 2 == 1))
    {
        co++;
        a = ceil(double(a) / double(2));
        b = ceil(double(b) / double(2));
    }
    if (power(2, co) == n)
    {
        cout << "Final!";
    }
    else
    {
        cout << co;
    }
}

#include <bits/stdc++.h>
#define FAST_READ ios_base::sync_with_stdio(0);
#define ll long long
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(), (x).end()
#define endl "\n"
#define MAXN 2000

using namespace std;

ll n,a,b;
vector<ll>q;

int main(){
FAST_READ;
cin>>n>>a>>b;
for(ll i=1;i<=n;i++)
{
 q.pb(i);
}
ll cnt=1;
ll match_cnt=1;
while((1LL<<match_cnt)<n)match_cnt++;
while(cnt<=match_cnt)
{

 ll kol=(ll)q.size()/2;
 while(kol--)
 {
   ll o=q[0];
   q.erase(q.begin());
   ll t=q[0];
   q.erase(q.begin());
   if((o==a && t==b) || (o==b && t==a))
   {
	  if(cnt==match_cnt)
	  {
		cout<<"Final!"<<endl;
	  }
	  else cout<<cnt<<endl;
	  return 0;
   }
   else if(o==a || o==b)
   {
	 q.pb(o);
   }
   else if(t==a || t==b)
   {
	 q.pb(t);
   }
   else q.pb(o);
 }
 sort(all(q));
 cnt++;

}

return 0;
}

//in the name of allah
#include<bits/stdc++.h>
#define double long double
typedef long long ll;
const ll MOD = 1e9+7;
const int MAX_N =400;
const ll INF = 1e8;

using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie();
    cout.tie();
    int n,a,b;
    cin >> n >> a >> b;
    if (b < a)
        swap(a,b);
    int k = n/2;
    ll lim = log2(n);
    while(1)
    {
        if (a <= k and b > k)
        {
            int rounds = log2(k);
            rounds++;
            if (rounds == log2(n))
                cout << "Final!";
            else
                cout << rounds;
            return 0;
        }
        else if (a <= k and b <= k)
        {
            k=k/2;
        }
        else
        {
            a-=k;
            b-=k;
        }
    }
    return 0;
}

#include <iostream>
#include <vector>

using namespace std;

vector < int > v;

int main() {
//	freopen("input.txt", "r", stdin);
//	freopen("output.txt", "w", stdout);
	int n, a, b, kol = 0;
	cin >> n >> a >> b;
	for (; a != b; ){
		a = a / 2 + a % 2;
		b = b / 2 + b % 2;
		kol++;
	}
	if ((1 << kol) == n)
		cout << "Final!";
	else
		cout << kol << '\n';
	return 0;
}

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n,a,b;cin>>n>>a>>b;
    if(a>b)
        swap(a,b);
    int j;
    for(int i=1;i<=8;i++)
    if(pow(2,i)==n){
            j=i;
            break;
    }
    int k=0,l=1;
    while(l)
    {
        if(a==b-1&&a%2!=0)
            l=0;
        if(a>1)
            a=(float)a/2+0.5;
        b=(float)b/2+0.5;
        k++;
    }
    if(k==j)
        cout<<"Final!";
    else
        cout<<k;
    return 0;
}

#include <iostream>
#include <bits/stdc++.h>
#define ll long long
using namespace std;

int main()
{
    ll n,a,b;
    scanf("%I64d%I64d%I64d",&n,&a,&b);
    int cnt=0;
    int cntn=0;
    while(a!=b)
    {
        cnt++;
        a=(a+1)/2;
        b=(b+1)/2;
    }
    while(n>=2)
    {
        cntn++;
        n=n/2;
    }
    if(cntn==cnt)
    {
        printf("Final!\n");
    }
    else
        printf("%d\n",cnt);
    return 0;
}

#include <bits/stdc++.h>
#define int long long
using namespace std;

void solve(){
	int n, a, b;
	cin>>n>>a>>b;
	if (a > b)
		swap(a, b);
	a--;
	b--;
	int i=0;
	while(a/2 != b/2){
		a/=2;
		b/=2;
		i++;
		n=n/2;
	}
	if (n==2){
		cout<<"Final!\n";
		return;
	}
	cout<<i+1;

}

int32_t main(){
	int q = 1;
	// cin>>q;
	while(q--)
		solve();
    return 0;
}

#include <bits/stdc++.h>

#define bug(x) cout << #x << " = " << x << endl;
#define fr(a) freopen(a,"r",stdin);
#define fw(a) freopen(a,"w",stdout);
#define tc() int tc;cin >> tc; for (int _tc=1;_tc<=tc;_tc++)
#define up(i,l,r) for (int i=l;i<=r;i++)
#define down(i,r,l) for (int i=r;i>=l;i--)
#define rep(i,l,r) for (int i=l;i<r;i++)
#define pb push_back
#define mp make_pair
#define ins insert
#define fi first
#define se second
using namespace std;
typedef long long int ll;
typedef unsigned long long int llu;
typedef pair<int,int> ii;

int main()
{
    int n,a,b,res=0;
    cin>>n>>a>>b;
    a--,b--;
    while(a!=b){
        a/=2;
        b/=2;
        res++;
    }
    if(res<log2(n))
        cout<<res;
    else
        cout<<"Final!";
    return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define fake_love money, lust
int main(){
	int n,a,b,g1,g2;
	cin >> n >> a >> b;
	if(a>b){
		swap(a,b);
	}
	int f=0;
	int n1=n;
	while(n>0){
		if(n/2>=a && b>n/2){
			break;
		}
		n /= 2;
		if(a>n){
		  a-=n;
		  b-=n;
	  }
		++f;
	}
	int p=0;
	for(int i=0;;++i){
		if(pow(2,i)==n1){
			p=i;
			break;
		}
	}
	if(f==0){
		cout << "Final!";
		return 0;
	}
	cout << p - f;
}

#include<bits/stdc++.h>
using namespace std;

int main()
{
    double n,a,b,cnt=0;
    scanf("%lf %lf %lf",&n,&a,&b);
    while(a!=b)
    {
        a=ceil(a/2);
        b=ceil(b/2);
        cnt++;
    }
    if(powl(2,cnt)==n)
        puts("Final!");
    else
        printf("%0.0f\n",cnt);
}

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fast_I_O ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
const int mod = 1e9+7 , INF = 1e9 ,  mx = 100005 ;
main()
{
    fast_I_O;
    int i,j,n,m,x,y,sum=0,p=0,l=0,k;
    cin>>n>>x>>y;
    for(i=n;i>=2;i/=2)
    {
        p++;
    }
    --x ,--y;
    while(x!=y) ++l , x/=2 , y/=2;
    if(l>=p) cout<<"Final!";
    else cout<<l;
    return 0;
}

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n,a,b,i;
    cin>>n>>a>>b;
    if(a>b)swap(a,b);
    if(a<=n/2&&b>n/2){cout<<"Final!";return 0;}
    for(i=0;a!=b;i++)a=(a+1)/2,b=(b+1)/2;
    cout<<i;
    return 0;
}

#include<iostream>
using namespace std;
int j=0;
/*int f(int l,int a,int b,int r)
{
	i++;
	int m=(l+r)/2;
	if(a<=m&&b>m)
	{
		return i;
	}
	else if(a<m&&b<=m)
	{

	}
}*/
int main()
{
	int n,a,b;
	cin>>n>>a>>b;
	if(a>b)
	{
		int t=a;
		a=b;
		b=t;
	}
	//cout<<f(0,a,b,n);
	int k=0,p=n;
	while(p>0)
	{
		k++;
		p/=2;
	}
	for(int i=n/2;i>0;i/=2)
	{
		j++;
		if(a<=i&&b>i)
		{
			i=0;
		}
		else if(a>=i&&b>i)
		{
			a-=i;
			b-=i;
		}
	}
	if(j==1)
	{
		cout<<"Final!";
	}
	else
	{
		cout<<k-j;
	}
	return 0;
}

#include<bits/stdc++.h>
#define int long long
#define f first
#define s second

using namespace std;

signed main()
{
    int n, a, b;
    cin >> n >> a >> b;
    int ans = 1;
    while ((a + 1) / 2 != (b + 1) / 2)
    {
        a = (a + 1) / 2;
        b = (b + 1) / 2;
        ++ans;
    }
    if (pow(2, ans) == n)
        cout << "Final!" << endl;
    else
        cout << ans << endl;
}

#include<cstdio>
#include<vector>
#include<queue>
#include<ctime>
#include<algorithm>
#include<cstdlib>
#include<stack>
#include<cstring>
#include<cmath>
using namespace std;

typedef long long LL;

const int INF = 2147483647;
const int maxn = 10000;

int a,b,n,tot,now,ans;
int p1[maxn],p2[maxn];

inline LL getint()
{
	LL ret = 0,f = 1;
	char c = getchar();
	while (c < '0' || c > '9')
	{
		if (c == '-') f = -1;
		c = getchar();
	}
	while (c >= '0' && c <= '9')
		ret = ret * 10 + c - '0',c = getchar();
	return ret * f;
}

inline void find(int o,int l,int r,int pos,int *a)
{
	a[++tot] = o;
	if (l == r) return;
	int mid = l + r >> 1,lc = o << 1,rc = o << 1 | 1;
	if (pos <= mid) find(lc,l,mid,pos,a);
	else find(rc,mid + 1,r,pos,a);
}

int main()
{
	#ifdef AMC
		freopen("AMC1.txt","r",stdin);
	#endif
	n = getint(); a = getint(); b = getint();
	find(1,1,n,a,p1);
	tot = 0;
	find(1,1,n,b,p2);
	for (ans = 1; ans <= tot; ans++)
		if (p1[ans] != p2[ans]) break;
	if (ans == 2) printf("Final!");
	else printf("%d",tot - ans + 1);
	return 0;
}

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n, a, b, k, r, o, z, max, min;
    cin >> n >> a >> b;
    if (n == 2)
    {
        cout << "Final!";
    }
    else
    {
        k = 2; r = n; o = 0;
        while (r != 1)
        {
            r = r / 2;
            o++;
        }
        r = 0;
        z = n;
        max = std::max(a, b);
        min = std::min(a, b);
        while (k <= n)
        {
            z = z / 2;
            if (min - z > 0 and max - z > 0)
            {
                min = min - z;
                max = max - z;
            }
            if (min <= n / k and max > n / k)
            {
                if (r == 0)
                {
                    cout << "Final!";
                }
                else
                {
                    cout << o - r;
                }
                break;
            }
            else
            {
                k = 2 * k;
                r++;
            }
        }
    }
    return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+5;

int main() {
    int n,a,b;
    scanf("%d %d %d",&n,&a,&b);
    if (a>b)
        swap(a,b);
    int cnt=0;
    while (a!=b){
        a=(a+1)/2;
        b=(b+1)/2;
        ++cnt;
    }
    int x=log2(n);
    if (cnt==x)
        printf("Final!");
    else
    printf("%d",cnt);
    return 0;
}

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int main(){
	//freopen("aa.in","r",stdin);
	int i,j;
	int n,a,b;
	scanf("%d%d%d",&n,&a,&b);
	--n,--a,--b;
	for(i=0;(1<<i)<=n;++i){
		int t=(n>>i)<<i;
		if((a&t)==(b&t))break;
	}
	if((1<<i)>=n)puts("Final!");
	else printf("%d\n",i);
	return 0;
}

#include <iostream>
#include <cstdlib>

#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define ll long long
#define forn(i, j, n) for(ll i = j; i < n; ++i)
#define forc(i, n, j) for(ll i = n-1; i >= j; --i)
#define forr(i, j, n, d) for(ll i = j; i != n; d)

using namespace std;

int main(){
	ll n, a, b;
	cin >> n >> a >> b;
	--a; --b;
	long u, p = 1;
	for(u = 2; u < n; u*=2){
		a>>=1; b>>=1;
		if(a == b) break;
		++p;
	}
	if(u == n) cout << "Final!" << endl;
	else cout << p << endl;

	cin >> a;
}

#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>
#include <set>
#include <map>
#include <queue>
#include <stdio.h>
#include <stack>
#include <string>
using namespace std;

int main(){
    //ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt","w", stdout);
    int a, b, n;
    cin>>n>>a>>b;
    a--;
    b--;
    if (a>b)
        swap(a,b);
    int c = 0;
    while (!(a+1==b && a%2==0)){
        a/=2;
        b/=2;
        c++;
    }
    int p = 1, cp = 0;
    while (p!=n){
        p*=2;
        cp++;
    }
    int ans = cp - c;
    if (ans == 1)
        cout<<"Final!";
    else
        cout<<c + 1;
}

#include <bits/stdc++.h>
using namespace std;
typedef long long ll ;
typedef double    dl ;
#define INF 0x7f

const int  inf = 987654321;
const int sz = 1e6 + 5;
const int mod = 1e9 + 7;
const int sqrtn = 300;

#define f(i,l,r) for(int i=l;i<=r;++i)
#define g(i,l,r) for(int i=l;i>=r;--i)
#define CLR(arr,val) memset(arr,val,sizeof(arr))
#define FAST_IO ios::sync_with_stdio(false);cin.tie(0);
#define pii pair<int,int>
#define lowbit(x) x&(-x)
#define X first
#define Y second
int n,a,b,c;
void work()
{
    cin>>n>>a>>b;
    if(a>b)swap(a,b);
    n/=2;
    while(!((b-a)==1 && a%2==1))
    {

        a=(a+1)/2;
        b=(b+1)/2;
        n /=2;
        c++;
    }
    if(n==1)  cout << "Final!"<<endl;
    else cout << c+1<<endl;

}

int main()
{
    FAST_IO ;

    work();

    return 0;
}

#include <iostream>
#include <cmath>
using namespace std;

int f(int n, int x, int y) {
	if (abs(x - y) == 1 )
	{
		if (x < y && (x % 2 == 1 && y % 2 == 0))return n;
		if (y < x && (x % 2 == 0 && y % 2 == 1))return n;

	}
	int x1, y1;
	if (x % 2 == 0)x1 = x / 2;
	else x1 = (x / 2) + 1;
	if (y % 2 == 0)y1 = y / 2;
	else y1 = (y / 2) + 1;

		return f(n+1,x1,y1);

}

int main() {
	int n, x, y;

	cin >> n >> x >> y;
	int mid = n / 2;
	if ((x<=mid &&y>mid) ||(y<=mid && x>mid) )cout << "Final!";
	else {
		cout << f(1, x, y);
	}
	return 0;
}

#include <iostream>
#include <vector>

using namespace std;

int n, a, b;

int pow(int a , int b){
    int res = 1;
    for(int i = 1; i <= b; i++){
        res = res*a;
    }
    return res;
}

int log(int n){
    int x = 1;
    while(true){
        if(pow(2,x)==n)
            return x;
        x=x+1;
    }
}

//class resp{
//public:
//    int
//};

//int match = 0;
//
//
//void recurs(vector<int> vect){
//    if(vect.size()==2){
//        if((vect[0]==a && vect[1]==b)||(vect[1]==a && vect[0]==b)){
//            return;
//        }
//        if(vect[0]==a||vect[1]==a){
//
//        }
//        if(vect[0]==b||vect[1]==b){
//
//        }
//    }
//    vector<int> a(vect.size());
//    vector<int> b(vect.size());
//    for(int i =0; i < a.size(); i++){
//        a[i]=vect[i];
//    }
//    for(int i = 0; i < b.size(); i++){
//        b[i]=vect[i+a.size()];
//    }
//    recurs(a,b);
//}

int parti(int match,int bigger,int lower, int n){
    if(bigger-lower<n/2){
        parti(match-1,bigger,lower,n/2);
        return 0;
    }
    else{
        int output = match;
        cout << output << endl;
        return 0;
    }
}

int main(int argc, const char * argv[]) {
    cin >> n >> a >> b;

    vector<int> arr(n+1,0);

    arr[a]=1;
    arr[b]=1;

//    vector<int> aux(n+1,0);
//    int tam = n;
//    for(int i = 1; i < tam;i ++){
//
//        for(int j = 1; j< tam/2;j++){
//            if(arr[2*j]==a || arr[j]==a)
//                aux.push_back(a);
//            else if(arr[j]==b)
//                aux.push_back(b);
//            else if()
//        }
//    }

    int bigger, lower;
    int match = log(n);
    if(a>b){
        bigger = a;
        lower = b;
    }
    else{
        bigger=b;
        lower = a;
    }

    int diff = bigger- lower;

//    if(bigger-lower<n/2){
//        parti(match-1,bigger,lower, n/2);
//        return 0;
//    }
//    else{
//        string output = "Final!";
//        cout << output << endl;
//        return 0;
//    }

//    if(diff < )

    match=1;
    bool parar = false;
    if(lower+1 == bigger && (lower%2==1))
        parar = true;
    while(!parar){
        match++;
        if(lower%2==0)
            lower=lower/2;
        else
            lower=lower/2+1;
        if(bigger%2==0)
            bigger=bigger/2;
        else
            bigger=bigger/2+1;
        if(lower+1 == bigger && (lower%2==1))
            parar = true;
    }
    if (n == pow(2,match)) {
        string output = "Final!";
        cout << output << endl;
        return 0;
    }
    else{
        int output = match;
        cout << output << endl;
        return 0;
    }
}

#include <iostream>

using namespace std;

int n, a, b, ans;

int main()
{
    cin >> n >> a >> b;
    if(a > b) swap(a,b);
    if(a <= n / 2 and b > n / 2) cout << "Final!";
    else{
        ans = 1; a = a - 1; b = b - 1;
        while(a / 2 != b / 2){
            a = a / 2; b = b / 2;
            ans = ans + 1;
        }

        cout << ans;
    }
    return 0;
}

#include <iostream>
#include <cmath>
using namespace std;
int main()
{int a,b,k=0,n;
cin>>n>>a>>b;
while (a!=b)
{
    a=a/2+a%2;
    b=b/2+b%2;
    k++;
}
if (pow(2,k)==n){cout<<"Final!";}else{cout<<k;}
return 0;
}

#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <utility>
#include <algorithm>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <deque>
#include <queue>
#include <stack>
#include <vector>
#include <tuple>
#include <random>
#include <time.h>
#include <math.h>
#include <fstream>

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
typedef __gnu_pbds::tree<int, __gnu_pbds::null_type, less<int>, __gnu_pbds::rb_tree_tag, __gnu_pbds::tree_order_statistics_node_update> ordered_set;
typedef unsigned int ui;
typedef long long ll;
typedef unsigned long long ull;
typedef long double lld;
typedef pair<int,int> pii;
typedef vector<int> vi;

const int BASE = 123457, INF = 2147483647;
const long long LL_INF = 9223372036854775807LL;
const double PI = 3.141592653589793238;

/*template <typename... Args>  void read(Args&... arg) { ((cin >> arg), ...); }
template <typename... Args>  void writel(bool with_space = true, Args... arg) {
    if (with_space) {
        ((cout << arg << " "), ...);
    }
    else ((cout << arg), ...);
}
template <typename... Args>  void writeln(bool with_space = false, Args... arg) {
    if (with_space) {
        ((cout << arg << " "), ...);
    }
    else ((cout << arg), ...);
    cout << endl;
}*/
const int MAX_N = 200000;
ll n, m, maxx, minn, ans = 0, a, b, k;
int main(){
    ios::sync_with_stdio(0); cin.tie(); cout.tie();
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);

    cin >> n >> a >> b;
    a--; b--;
    m = n;
    while (n > 1) {
        int x = a & 1, y = b & 1;
        k++;
        n /= 2;
        a /= 2;
        b /= 2;
        if (x != y && a == b) ans = k;
        //cout << n << " " << a << " " << b << endl;
    }
    if (1 << ans != m) cout << ans;
    else cout << "Final!";
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
    set<int> s1;
    int n , a , b;
    int finde(int pos){

        for(int i = pos; i <= n;i++){
            if(s1.count(i))continue;
            else{
                return i;
            }
        }
        return pos;

    }
    int check(set<int> s1){
    int res = 0;
    for(int i = 1 ; i <= n;i++){
        if(s1.count(i))res++;
    }
    return res;

    }

    main(){
    cin >> n;
    cin >> a >> b;
    if(a > b) swap(a,b);

    bool ok =false;
    int     round = 0;
    bool v = false;
    while(1){
        round++;
        bool yes = true;
        for(int i = 1; i <= n;i++){

            if(i == a){
                int tt = finde(i + 1);

                if(tt == b){
                    ok = true;
                    break;
                }
                s1.insert(tt);
                continue;
            }
//            if(i == b){
//                int tt = finde(i + 1);
//
//                s1.insert(tt);
//                continue;
//            }

            if(!s1.count(i)){

                int tt= finde(i + 1);
               // cout << i <<" "<< tt << endl;

                // 4 znacheniya qoytadi
                if(tt == a){
                    s1.insert(i);
                    i = a ;

                    continue;
                    }
                if(tt == b){
                    s1.insert(i);
                    i++;
                    continue;
                }

                s1.insert(tt);

            }

        }
        if(ok)break;

    }
//    for(int i = 1 ; i <= n;i++){
//        cout << (s1.count(i) ? i : 0) << endl;
//    }
    if(check(s1)+ 2 == n)return cout <<"Final!",0;
    cout << round << endl;

    }

#include <bits/stdc++.h>

#define F first
#define S second
#define sz(a) int((a).size())
#define all(a) (a).begin(),(a).end()
#define pb push_back
#define in insert
#define pii pair <int, int>
#define count_bit(a) __builtin_popcount(a)
#define GGWP return 0

using namespace std;

typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;

const int inf = int (1e9 + 7);
const double eps = (1e-9);

int main () {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    #ifndef ONLINE_JUDGE
   //     freopen("in", "r", stdin);
    #endif // ONLINE_JUDGE

    int n, a, b, res = 0;

    cin >> n >> a >> b;

    if (a > b)
        swap (a, b);

    a += n - 1;
    b += n - 1;

    while (a != b) {
        a /= 2;
        b /= 2;
        ++res;
    }

    if (a == 1) {
        cout << "Final!";
    }
    else
        cout << res;

    GGWP;
}

#include <bits/stdc++.h>
using namespace std;
struct cur
{
	int i,j,left,right;
};

int main() {
	//freopen("input.txt", "r", stdin);

	int n,a,b,kol=1;
	cin >>n>>a>>b;
	if (a>b)
	{
		swap(a,b);
	}
	while (true)
	{
		if (b-a==1 and a%2==1 and b%2==0)
		break;
		kol++;
		a=(a+1)/2;
		b=(b+1)/2;
		n/=2;
	}
	if (n==2)cout <<"Final!";
	else cout <<kol;
	return 0;
}

#include<iostream>
using namespace std;

int main()
{
	int N, a, b;
	cin >> N;
	cin >> a;
	cin >> b;
	N /= 2;
	a--;
	b--;
	if (a/N != b/N)
		cout << "Final!";
	else
	while (N != 1)
	{
		N/= 2;
		if (a/N != b/N)
		{
			int p = 0;
			while (N != 1)
			{
				N/=2;
				p++;
			}
			cout << p + 1;
				break;
		}

	}
	return 0;
}

#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cassert>

using namespace std;

typedef long long ll;

int main() {
    int n, a, b;
    cin >> n >> a >> b;
    vector <int> x;
    for (int i = 1; i <= n; ++i) {
        x.push_back(i);
    }
    if (a > b) swap(a, b);
    int num = 1;
    while (true) {
        vector <int> tmp;
        for (int i = 0; i < x.size(); i += 2) {
            if (x[i] == a && x[i + 1] == b) {
                if (x.size() == 2) {
                    cout << "Final!" << endl;
                }
                else {
                    cout << num << endl;
                }
                return 0;
            }
            if (x[i] == a || x[i] == b) {
                tmp.push_back(x[i]);
            }
            else {
                tmp.push_back(x[i + 1]);
            }
        }
        x = tmp;
        ++num;
    }
}

#include<bits/stdc++.h>
using namespace std;
#define ll  long long
#define endl '\n'
const ll mod = 1000000007;
const double PI = 3.141592653589793238463;
using namespace std;
int main()
{
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    int ans=1;
    int x,l,k;
    cin>>x>>l>>k;
    vector<int>v,v1;
    v.push_back(0);
    for (int i=1;i<=x;i++){
        v.push_back(i);
    }
    if (l>k)
        swap(l,k);
    while (1){
            v1.push_back(0);
        for (int i=1;i<v.size()-1;i+=2)
        {
            if (v[i]==l)
            {
                v1.push_back(v[i]);
            }
            else if (v[i+1]==l)
                v1.push_back(v[i+1]);
             else if (v[i]==k)
                v1.push_back(v[i]);
            else if (v[i+1]==k)
                v1.push_back(v[i+1]);
            else
                v1.push_back(v[i]);
            if (v[i]==l &&v[i+1]==k)
            {
                string s="Final!";
                string t=to_string(ans);
                cout<<(v.size()==3?s:t)<<endl;
                return 0;
            }

        }
        v=v1;
        v1.clear();
    ans++;

    }
    return 0;
}

#define _CRT_SECURE_NO_DEPRECATE
#include <set>
#include <map>
#include <deque>
#include <queue>
#include <stack>
#include <cmath>
#ifndef __GNUC__
#include <intrin.h>
#endif // !__GNUC__
#include <random>
#include <vector>
#include <cstdio>
#include <string>
#include <cstdlib>
#include <numeric>
#include <cstring>
#include <complex>
#include <cassert>
#include <iterator>
#include <iostream>
#include <algorithm>
#include <functional>

int bsf(int x) {
#ifdef __GNUC__
    return __builtin_ctz(x);
#else
    unsigned long i;
    _BitScanForward(&i, x);
    return i;
#endif
}
int bsr(int x) {
#ifdef __GNUC__
    return 31 - __builtin_clz(x);
#else
    unsigned long i;
    _BitScanReverse(&i, x);
    return i;
#endif
}

using namespace std;
typedef long long int64;
const double pi = 3.14159265358979323846;
const int inf = (int)2e+9 + 2;
const int mod = (int)1e+9 + 7;
const double eps = 1e-8;
const int N = 300000;

int n, m, k;

int lg(int x)
{
    int ret = -1;
    for (; x; ++ret, x >>= 1);
    return ret;
}

void solve()
{
    int a, b;
    cin >> n >> a >> b;
    int i = 1;
    if (a > b) swap(a, b);
    for (; b - a != 1 || b & 1; ++i) {
        a = (a + 1) >> 1;
        b = (b + 1) >> 1;
    }
    if (i == lg(n))
        cout << "Final!";
    else
        cout << i;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int test = 1;
    //cin >> test;
    for (; test; --test)
        solve();
    return 0;
}

/**---------FILE-INFO-----------
FilePath: -
Status: -
Task: -
Contest: -
Author: MazyCrazy
Create DateTime: 27.01.2019 19:26:13.392
Out DateTime: 27.01.2019 19:31:49.212
TaskLink: -
Template version: full_2019-01-13.cpp
Generated by program: ULPS (0.0.1)
IDE program: ULPS (0.0.1)
File hashsum MD5: 0672a0f5cb32eff222a2da061060cc86
-----------FILE-INFO---------**/

/*~#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
#pragma comment(linker, "/STACK:16777216")*/
//~#pragma GCC optimize("arch=corei7-avx")

#include <bits/stdc++.h>

using namespace std;

#define DEF_SPOILER
#ifdef DEF_SPOILER

#define STDERR_ON

#define mp             make_pair
#define pb             push_back
#define fi             first
#define se             second
#define sz(x)          (int)((x).size())
#define _fill(x, y)    memset(x, y, sizeof(y))
#define all(x)         (x).begin(), (x).end()
#define sci(x)         int x;       scanf("%d", &x);
#define scii(x, y)     int x, y;    scanf("%d %d", &x, &y);
#define sciii(x, y, z) int x, y, z; scanf("%d %d %d", &x, &y, &z);
#define TC(x)          sci(x); while(x --)
#ifdef STDERR_ON
#define eprintf(...)   fprintf(stderr, __VA_ARGS__)
#define debug(x)       { cerr << #x << " = " << x << endl; }
#else
#define eprintf(...)   { }
#define debug(x)       { }
#endif
#define rep(i, x, y)   for (__typeof(x) i = x; i <= y; i ++)
#define repi(i, x, y)  for (__typeof(x) i = x; i >= y; i --)
#define fore(itr, x)   for (__typeof(x.begin()) itr = x.begin(); itr != x.end(); itr ++)
#define forei(itr, x)  for (__typeof(x.end()) itr = x.end() - 1; itr != x.begin() - 1; itr --)
typedef long long      ll;
typedef pair<int, int> ii;
typedef pair<ii, int>  iii;
typedef vector<int>    vi;
typedef vector<ii>     vii;
typedef vector<iii>    viii;
/*~
const   int            inf = 0;
const   double         eps = 0;
const   int            ms  = 0;
const   int            md  = 0;
*/

typedef long double ld;
typedef vector<ll> vl;
typedef pair<ll, ll> pll;
typedef vector<char> vc;
const int INF = (int)1e9 + 1;
const ll INFLL = (ll)2e18 + 1;
const ll MOD = (ll)1e9 + 7;
int bpow(int a, int n) {
    int res = 1;
    for ( ; n; n >>= 1, a *= a)
        if (n & 1)
            res *= a;
    return res;
}
int gcd(int a, int b) {
    return a ? gcd(b % a, a) : b;
}
int lcm(int a, int b) {
    return a / gcd(a, b) * b;
}
int gcdex(int a, int b, int &x, int &y) {
    if (a == 0) {
        x = 0;
        y = 1;
        return b;
    }
    int x1, y1;
    int d = gcdex(b % a, a, x1, y1);
    x = y1 - (b / a) * x1;
    y = x1;
    return d;
}
#define oln { cout << endl; }
#define ovec(a) { for (int i = 0; i < sz(a); ++i) cout << a[i] << " "; }
struct pt {
    double x, y;
    pt(double x = 0, double y = 0) : x(x), y(y) { }
};
//~#define x first
//~#define y second

#define RANDTYPE_TIME
#ifdef RANDTYPE_TIME
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#elif RANDTYPE_DEVICE
random_device rd;
mt19937 rng(rd);
#endif
int rand() {
    return uniform_int_distribution<int>()(rng);
}
int random(int l, int r) {
    return uniform_int_distribution<int>(l, r)(rng);
}

#include <ext/pb_ds/assoc_container.hpp>
//~#include <ext/pb_ds/tree_policy.hpp>
//~#include <ext/pb_ds/detail/standard_policies.hpp>
using namespace __gnu_pbds;
template<typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define order_of_key order
#define find_by_order byorder

#include <ext/rope>
using namespace __gnu_cxx;
#define mbegin mutable_begin
#define mend mutable_end
#define mall(x) (x).mbegin(), (x).mend()

template<typename T> T sqr(T a) {
    return a * a;
}
template<typename T, typename C> C eucdist(T ax, T ay, T bx, T by) {
    return sqrt(sqr(ax - bx) + sqr(ay - by));
}
template<typename T, typename C> C manhdist(T ax, T ay, T bx, T by) {
    return abs(ax - bx) + abs(ay - by);
}
template<typename T> using matrix = vector<vector<T> >;
#define bool char
#endif //~DEF_SPOILER
//~---------------------------------------------------------------------------------------
//~---------------------------------------------------------------------------------------

const int MAX_N = (int)2e5;

vi g[MAX_N];
char used[MAX_N];

signed main() {
//~#define DEBUG
#ifndef DEBUG
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    #define endl '\n'
#endif

//~#define FILE_IO
#ifdef FILE_IO
    freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
#endif

    int n, a, b;
    cin >> n >> a >> b;
    int cnt = 0;
    while (a != b) {
        a = (a + 1) / 2;
        b = (b + 1) / 2;
        n /= 2;
        ++cnt;
    }
    if (n == 1)
        cout << "Final!" << endl;
    else
        cout << cnt << endl;

    return 0;
}

/*~
TESTS:

x
------------------
y
*/

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <math.h>

using namespace std;

typedef long long LL;

int main()
{
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);

	int n;
	cin >> n;
	int a, b;
	cin >> a >> b;
	if (b < a)
		swap(b, a);

	int k = 0, nn = n;
	while (nn != 1)
	{
		k++;
		nn /= 2;
	}

	int ans = 0;
	int m = n / 2;
	if (b > m && a <= m)
	{
		cout << "Final!";
		return 0;
	}
	while (!(b > m && a <= m))
	{
		if (b > m)
		{
			a -= m;
			b -= m;
		}
		n = m;
		ans++;
		m = n / 2;
	}

	cout << k - ans;

	return 0;
}

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cassert>
using namespace std;
typedef long long ll;

int main()
{
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

	int n, a, b;
	cin >> n >> a >> b;
	a--;
	b--;

	int match = 1;
	while(n > 0)
	{
		if(a/2 == b/2)
		{
			if(n == 2) cout << "Final!";
			else cout << match;
			return 0;
		}

		a /= 2;
		b /= 2;
		n /= 2;
		match++;
	}

}

#include <stdio.h>
#include <stdlib.h>

void action(int a, int b, int &n, bool *C, int &r) {
	int i, flag, n1 = n;

	while (n != 1) {
		flag = -1;

		for (i = 0; i < n1; ++i) {
			if (flag >= 0) {
				if (C[i] == true) {
					if ((i == a && flag == b) || (i == b && flag == a)) {
						return;
					}

					if (i == a || i == b) {
						C[flag] = false;
					}
					else {
						C[i] = false;
					}

					flag = -1;

					continue;
				}
			}

			if (C[i] == true) {
				flag = i;
			}
		}

		++r;
		n /= 2;
	}
}

int main() {
	int n, a, b, r, i;
	bool *C;

	scanf_s("%d", &n);
	scanf_s("%d", &a);
	scanf_s("%d", &b);

	C = new bool[n];

	for (i = 0; i < n; ++i) {
		C[i] = true;
	}

	r = 1;

	action(a - 1, b - 1, n, C, r);

	if (n == 2) {
		printf("Final!");
	}
	else {
		printf("%d", r);
	}
}

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n,a,b;
    cin>>n>>a>>b;
    if(a>b) swap(a,b);
    int round=1;
    while( (a+1)!=b || a%2==0)
    {
        //cout<<a<<" "<<b<<endl;
        a=ceil(1.0*a/2);
        b=ceil(1.0*b/2);
        round++;
    }
    int r=round;
    int N=1;
    while(r--)
    {
        N*=2;
    }
    if(N==n) cout<<"Final!\n";
    else cout<<round<<endl;
    return 0;
}

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    	int a,b,c;
    	cin>>a>>b>>c;
    	int cnt=0;
    	while(b/2+b%2!=c/2+c%2)
    	{
    		b=b/2+b%2;
    		c=c/2+c%2;
    		a/=2;
    		cnt++;
    	}
    	if(a==2)
    	{
    		cout<<"Final!";
    		return 0;
    	}
    	cout<<cnt+1;
    	return 0;
    }

#include <iostream>
#include <cmath>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <algorithm>

#define double long double
#define int long long
#define inf (int)1e9

using namespace std;

signed main()
{
    int n, a, b; cin >> n >> a >> b;
    a--; b--;
    int k = log2(n);
    for (int i = 0; i < k; ++i) {
        a >>= 1;
        b >>= 1;
        if (a == b) {
            if (i == k - 1) return cout << "Final!" << endl, 0;
            else return cout << i + 1 << endl, 0;
        }
    }
}

#include <bits/stdc++.h>

#define f first
#define s second
#define pb push_back
#define all(a) a.begin(), a.end()
#define IO ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0)

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;

template<typename T1, typename T2> inline void chkmin(T1 & x, T2 y) {if (x > y) x  = y;}
template<typename T1, typename T2> inline void chkmax(T1 & x, T2 y) {if (x < y) x  = y;}
template<typename T1> inline void die(T1 x) {cout << x; exit(0);}

int main() {
	//freopen("input.txt", "r", stdin);
    int n, a, b;
    cin >> n >> a >> b;
    vector<int> cur;
    for (int i = 1; i <= n; ++i) {
        cur.pb(i);
    }
    int round = 1;
    while (cur.size() > 2) {
        vector<int> to;
        for (int j = 0; j < cur.size(); j += 2) {
            if ((cur[j] == a && cur[j + 1] == b) || (cur[j] == b && cur[j + 1] == a)) {
                cout << round;
                return 0;
            }
            if (cur[j] == a || cur[j + 1] == a)
                to.pb(a);
            else {
                if (cur[j] == b || cur[j + 1] == b)
                    to.pb(b);
                else
                    to.pb(cur[j]);
            }
        }
        ++round;
        cur = to;
    }
    cout << "Final!";
	return 0;
}

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a,b,tot,count=1;
cin>>tot;
   cin >> a;
   cin >> b;
   if(a>b)
    swap(a,b);
   while(((b-a)!=1)||((b-a)==1&&(a%2)==0&&(b%2)!=0))
   {
       b=(b+1)/2;
       a=(a+1)/2;
       count++;
       if((b-a)==1&&(b%2)==0&&(a%2)!=0)
       break;
       else
       continue;

   }
    if(count==((int)round(log2(tot))))
       cout<<"Final!";
       else
       {
           cout<<count;
       }

   return 0;
}

#include <bits/stdc++.h>
using namespace std;
int main(){
	int a,b,c,f=0;
	cin>>a>>b>>c;
	vector<int>d;
	for(int i=1;i<=a;i++){
		d.push_back(i);
	}
	int u=0;
	while(d.size()!=2){
		f++;
		for(int i=0;i<d.size();i++){
			if(i%2==u){
				if((d[i]==b&&d[i+1]==c)||(d[i]==c&&d[i+1]==b)){
					cout<<f;
					return 0;
				}
				else if(d[i]==b||d[i]==c){
					d.erase(d.begin()+i+1);
					if(u==1){
						u=0;
					}
					else{
						u=1;
					}
				}
				else{
					d.erase(d.begin()+i);
					if(u==1){
						u=0;
					}
					else{
						u=1;
					}
				}
			}
		}
		u=0;
	}
	cout<<"Final!";
}

#include <bits/stdc++.h>

using namespace std;

int main() {
	int n, a, b;
	cin >> n >> a >> b;
	--a, --b;
	if (a > b) swap(a, b);
	int h = 0;
	while(n >>= 1) h++;
	int ans = 0;
	while (a != b) {
		a >>= 1;
		b >>= 1;
		ans++;
	}
	if (ans == h) cout << "Final!" << endl;
	else cout << ans << endl;
}

#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define fr first
#define sc second
#define MOD 1000000007
#define len(x) x.size()
#define min3(a, b, c) min(a, min(b, c))
#define max3(a, b, c) max(a, max(b, c))
#define all(v) v.begin(), v.end()
#define alla(a,n) a, a + n
#define f(i, n) for (int i = 0; i < int(n); i++)
#define g(i, n) for (int i = 0; i < int(n-1); i++)
#define fj(j, n) for (int j = 0; j < int(n); j++)
#define fio ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> pll;
typedef vector<ll> vll;
typedef vector<pll> vpll;
typedef vector<vll> vvll;
typedef vector<string> vs;

// Driver function to sort the vector elements by
// second element of pair in descending order
bool sortbysecdesc(const pair<int,int> &a,
                   const pair<int,int> &b)
{
       return a.second>b.second;
}

// Driver function to sort the vector elements by
// first element of pair in descending order
bool sortinrev(const pair<int,int> &a,
               const pair<int,int> &b)
{
       return (a.first > b.first);
}

// Function to return gcd of a and b
ll gcd(ll a, ll b)
{
    if (a == 0)
        return b;
    return gcd(b % a, a);
}

//Function to return lcm of a and b
ll lcm(ll a,ll b)
{
    return (a*b)/gcd(a,b);
}

// Function to find gcd of array of
// numbers
int findGCD(ll a[], ll n)
{
    int result = a[0];
    for (int i = 1; i < n; i++)
    {
        result = gcd(a[i], result);

        if(result == 1)
        {
           return 1;
        }
    }
    return result;
}

int32_t main() {
    fio;

   ll n,a,b,count=0;
   cin>>n>>a>>b;
   if(a<=n/2 && b>n/2 || b<=n/2 && a>n/2)
   cout<<"Final!"<<endl;
   else
   {
       a--;
       b--;
       while(a!=b)
       {
           a/=2;
           b/=2;
           count++;
       }
       cout<<count<<endl;
   }

    return 0 ;

}

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld;
#define f first
#define s second
#define all(a) a.begin(), a.end()
#define pll pair <long long, long long>

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    ll n, a, b;

    cin >> n >> a >> b;
    ll cn = n;
    ll cur = 1;
    if (b < a) swap(a, b);

    while (1)
    {
        if ((a&1) && b == a + 1) break;
        a = (a + 1) / 2;
        b = (b + 1) / 2;
        cur++;
    }
    if ((ll)log2(n) == cur)
    {
        cout << "Final!";
    }
    else cout << cur;
    return 0;
}

#include<iostream>
#include<string>
#include<cstring>
#include<vector>
#include<stack>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<sstream>
#include<cmath>
#include<iterator>
#include<unordered_map>
using namespace std;
#define _for(i,a,b) for(int i=(a);i<(b);++i)
typedef long long ll;
const int maxn = 100000+2;

int getk(int n) {
	int x = 2, ans = 1;
	while (x != n) {
		x <<= 1; ans++;
	}
	return ans;
}
int main()
{
	int n, a, b;
	while (cin >> n >> a >> b) {
		int mk = getk(n);

		int L = 1, R = n;

		int cnt = 0;
		while (a<=R&&a>=L&&b<=R&&b>=L) {
			cnt++;
			int m = (R + L) >> 1;
			if (a <= m) {
				R = m;
			}
			else {
				L = m + 1;
			}
		}

		if (cnt == 1) {
			cout << "Final!" << endl;
		}
		else {
			cout << mk - cnt + 1 << endl;
		}
	}

	return 0;
}

//#pragma GCC optimize("Ofast")

#include <fstream>
#include <vector>
#include <string>
#include <set>
#include <map>
#include <algorithm>
#include <stack>
#include <queue>
#include <deque>
#include <iomanip>
#include <math.h>

using namespace std;

#ifdef _DEBUG
ifstream cin("input.txt");
ofstream cout("output.txt");
#else
#include <iostream>
#endif

typedef long long ll;
typedef long double ld;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;

#define all(a) a.begin(), a.end()
#define i_o ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)

int main(){
	int n;
	cin >> n;
	int x, y;
	cin >> x >> y, x--, y--;
	if (n == 2){
		cout << "Final!";
		return 0;
	}
	if (x / 2 == y / 2) {
		cout << 1;
		return 0;
	}
	for (int k = 1; n / (1 << (k - 1)) > 2; k++){
		if (x / 2 == y / 2){
			cout << k;
			return 0;
		}
		x /= 2, y /= 2;
	}
	cout << "Final!";
	return 0;
}

#include <bits/stdc++.h>
#define sz(x) (long long)x.size()

using namespace std;

//mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());

const int N = 1e5 + 5, M = 1e6 + 7, SM = 1e3 + 5, logN = 20;
const long long MOD = 1e9 + 7, INF = 1e18 + 9;
const int dx[] = {1, 0, 0, -1, -1, 1, -1, 1};
const int dy[] = {0, 1, -1, 0, -1, 1, 1, -1};

void debug() {
	cerr << "\n";
}
template<typename Head, typename... Tail>
void debug(Head a, Tail... b) {
    cerr << a << " ";
    debug(b...);
}

int main() {
	//freopen(".in", "r", stdin);
	//freopen(".out", "w", stdout);
	ios_base::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	long long n, a, b; cin >> n >> a >> b;

	if(a > b) swap(a, b);

	long long k = n, cnt = 0;

	while(1) {
		if(a >= k && b >= k) a -= k, b -= k;
		if(k / 2 >= a && k / 2 < b) break;
		cnt++;
		k >>= 1;
	}

	if(cnt == 0) cout << "Final!";
	else cout << (long long)log2(n) - cnt;

	cout << endl;
	return 0;
}

#include<bits/stdc++.h>
using namespace std;

#define int long long
int d[10] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512};

signed main() {
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n, a, b;
    cin >> n >> a >> b;
    int kol = 0;
    for (int i = 1; i <= 8; i++)
        if (n == d[i])
            kol = i;
    //cout << kol << " ";

    vector<vector<int> > v(10);
    for (int i = 1; i <= n; i++)
        v[1].push_back(i);
    vector<int> v1;
    for (int j = 1; j <= kol; j++) {
        int s = v[j].size();
        int tec = s / 2;
        for (int i = 0; i < tec; i++) {
            if ((v[j][2 * i] == a && v[j][2 * i + 1] == b) || (v[j][2 * i + 1] == a && v[j][2 * i] == b)) {
                if (j == kol)
                    cout << "Final!";
                else
                    cout << j;
                return 0;
            }
            else if (v[j][2 * i] == a || v[j][2 * i + 1] == a)
                v[j + 1].push_back(a);
            else if (v[j][2 * i] == b || v[j][2 * i + 1] == b)
                v[j + 1].push_back(b);
            else
                v[j + 1].push_back(v[j][2 * i]);
        }
        //v = v1;
    }

    return 0;
}

#include<iostream>
#include<vector>
#include<math.h>
#include<iomanip>
#include<string>
#include<algorithm>
#include<map>
using namespace std;
int main()
{
	int n,l,r,cnt,counter=0;
	cin >> n >> l >> r;
	vector<int>vec(n);
	for (int i = 0; i < n; i++)
		vec[i] = i+1;
	cnt = n*0.5;
	if ((l > cnt && r <= cnt) || (r>cnt && l<=cnt))
		cout << "Final!" << endl;
	else
	{
			while (1)
			{
				for (int p = 0; p < vec.size();)
				{
					if ((vec[p] == r && vec[p + 1] == l) || (vec[p] == l && vec[p + 1] == r))
					{
						cout << counter+1 << endl;
						return 0;
					}
					if (vec[p] != l && vec[p] != r)
						vec[p] = -1;
					else
						vec[p + 1] = -1;
					p += 2;
				}
				for (int i = 0; i < vec.size();)
				{
					if (vec[i] == -1)
						vec.erase(vec.begin() + i, vec.begin() + i + 1);
					else
						i++;
				}
				counter++;
			}
	}
	return 0;
}

#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <numeric>
#define ll long long
using namespace std;

int main()
{
	int n, a, b, j = 1;
	cin >> n >> a >> b;
	a--, b--;
	while (n >= 2)
	{
		if (a / 2 == b / 2)
		{
			if (n == 2)
				cout << "Final!";
			else
				cout << j;
			break;
		}
		else
			j++, n /= 2, a /= 2, b /= 2;
	}
	return 0;
}

#include <bits/stdc++.h>
#define MAX 300
using namespace std;

int main(){
	int n, a, b, x, y;

	cin >> n >> x >> y;
	a = min(x, y);
	b = max(x, y);

	int z = 1;
	int rounds = n;
	int v[MAX];

	for(int i = 0; i < n; i++) v[i] = i+1;
	bool flag = false;

	while(pow(2, z) < n){
		for(int i = 0; i < rounds; i += 2){
			if(v[i] == a || v[i+1] == a || v[i] == b || v[i+1] == b){
				if(v[i] == a && v[i+1] == b){
					flag = true;
					break;
				} else {
					if(v[i] == a || v[i] == b) v[i+1] = 0;
					else if(v[i+1] == a || v[i+1] == b) v[i] = 0;
				}
			} else v[i+1] = 0;
		}

		for(int i = 0; i < rounds; i++ ){
			if(v[i] == 0){
				for(int j = i; j < rounds; j++){
					v[j] = v[j+1];
				}
				rounds--;

				if(v[i] == 0) i--;
			}
		}
		if(flag) break;
		z++;
	}

	if(flag || pow(2, z) != n) cout << z << endl;
	else cout << "Final!" << endl;

	return 0;
}

#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define mod 1000000007
#define MAX 1000000000000000
#define all(v) v.begin(),v.end()
#define rep(i,a,b) for(i=(ll)a;i<(ll)b;i++)
#define revrep(i,a,b) for(i=(ll)a;i>=(ll)b;i--)
#define ii pair<ll,pair<ll,ll> >
#define MP make_pair
#define pb push_back
#define f first
#define se second
#define ll long long int
#define vi vector<ll>
ll modexp(ll a,ll b){ ll res = 1; while(b > 0){  if(b & 1) res = (res * a)%mod;  a = (a * a)%mod;  b/=2;  }  return res; }
#define rs resize
typedef tree< ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update > OST;
#define TRACE
#ifdef TRACE
#define trace(...) __f(#__VA_ARGS__, __VA_ARGS__)
    template <typename Arg1>
    void __f(const char* name, Arg1&& arg1){
        cout << name << " : " << arg1 << endl;
    }
    template <typename Arg1, typename... Args>
    void __f(const char* names, Arg1&& arg1, Args&&... args){
        const char* comma = strchr(names + 1, ','); cout.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...);
    }
#else
#define trace(...)
#endif

const ll N = 100009;
ll n,a,b,i,j,lf,rf,ls,rs,id = -1;
ll cal(ll n)
{
    ll i = 1,c = 0;
    while(1){
        if(n == i)
            return c;
        i *= 2;
        c += 1;
    }
}
int main()
{
    std::ios_base::sync_with_stdio(false); cin.tie(NULL);
    cin>>n>>a>>b;
    if(a > b)
        swap(a,b);
    for(i = 1;i <= n;i *= 2){
        for(j = 1;j < n;j += i * 2){
            lf = j;
            rf = lf + i - 1;
            ls = rf + 1;
            rs = ls + i - 1;
            if(rs > n)
                break;
            if(lf <= a and a <= rf and ls <= b and b <= rs){
                id = i;
                break;
            }
        }
        if(id != -1)
            break;
    }
    a = cal(id) + 1;
    b = cal(n);
    if(a == b)
        cout<<"Final!";
    else
        cout<<a;
    return 0;
}

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <queue>
#include <cstring>
#include <fstream>
#define ll long long int
using namespace std;
const double _pi = acos(-1.0);
int ar[10][260];
int main()
{
    //freopen("in.txt", "r", stdin);
	int n, a, b, res = 1, c = 0;
	scanf("%d %d %d", &n, &a, &b);
	int n2 = n;
	while(n2 > 1)
	{
		n2 = n2 / 2;
		c++;
	}
	for(int i = 0; i < n; i++)
	{
		ar[0][i] = i+1;
	}
	while(res < c)
	{
		bool d = false;
		for(int i = 0; i < n; i+=2)
		{
			if(ar[res-1][i] == a || ar[res-1][i] == b)
			{
				if(ar[res-1][i+1] == a || ar[res-1][i+1] == b)
				{
					d = true;
					break;
				}
				ar[res][i/2] = ar[res-1][i];
			}
			else ar[res][i/2] = ar[res-1][i+1];
		}
		if(d) break;
		n = n / 2;
		res++;
	}
	if(res == c) printf("Final!\n");
	else printf("%d\n", res);
	return 0;
}

#define FILE_NAME dijkstra
#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
#include <set>
#include <map>

typedef long long ll;

using namespace std;

template<typename T> void alert(const T& t) { cout << t; exit(0); }
template<typename T> inline void alert(vector<T> &t, char delim = ' ') { for (T const& ti : t) cout << ti << delim; exit(0); }

int main()
{
	#ifdef DEBUG
	freopen("Text.txt", "r", stdin);
	#else
	//freopen(FILE_NAME + ".in", "r", stdin);
	//freopen(FILE_NAME + ".out", "w", stdout);
	#endif
	int n, a, b;
	cin >> n >> a >> b;
	int ans = floor(log(n * 1.0) / log(2 * 1.0));
	int final = floor(log(n * 1.0) / log(2 * 1.0));
	int l = 0, r = n;
	while (1)
	{
		int mid = (r + l) / 2;
		if ((a <= mid && b > mid) || (b <= mid && a > mid))
		{
			if (ans == final)
			{
				alert("Final!");
			}
			else
			{
				alert(ans);
			}
		}
		else
		{
			if (a <= mid && b <= mid)
			{
				r = mid;
			}
			else
			{
				l = mid;
			}
			if (ans == 1)
			{
				alert(ans);
			}
			else
			{
				ans--;
			}
		}
	}
}

#include <bits/stdc++.h>
#define int long long
#define endl "\n"
#define pb push_back

using namespace std;

signed main()
{
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    int n, a, b;
    cin >> n >> a >> b;
    if (a > b) swap(a, b);
    if (n / 2 >= a && n / 2 < b)
    {
        cout << "Final!";
        return 0;
    }
    int k = 0;
    while (a != b)
    {
        k++;
        (a % 2 == 0) ? a /= 2 : a = (a / 2) + 1;
        (b % 2 == 0) ? b /= 2 : b = (b / 2) + 1;
    }
    cout << k;
    return 0;
}

#include<bits/stdc++.h>
using namespace std;

int main() {
  int n, a, b;
  cin >> n >> a >> b;
  a--; b--;
  int k = 1;
  while ((a /= 2) != (b /= 2)) {
    n /= 2;
    k++;
  }
  if (n == 2) cout << "Final!" << endl;
  else cout << k << endl;
}

#include <bits/stdc++.h>

#define s second
#define f first
#define ll long long
#define p pair <ll, ll>

using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int n, a, b;
    cin >> n >> a >> b;
    if (b < a) swap(a, b);
    int ans = 0;
    while (b != a) {
        b = (b + 1) / 2; a = (a + 1) / 2;
        ans++;
    }
    if (pow(2, ans) == n) cout << "Final!";
    else cout << ans;
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a,b,i,round=1;
    cin>>n>>a>>b;
    for(i=0;;i++){
        if(a%2==0&&a-b==1) break;
        if(b%2==0&&b-a==1) break;
        if(b%2==0&&b!=1) b=b/2;
        else b=(b/2)+1;
        if(a%2==0&&a!=1) a=a/2;
        else a=(a/2)+1;
        round++;
    }
    if(pow(2,round)==n) cout<<"Final!";
    else cout<<round;
    return 0;
}

//#include "stdc++.h"
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    //cout<<fixed<<setprecision(10);
    ll n,a,b;
    cin>>n>>a>>b;
    if(a>b)
    {
        swap(a,b);
    }
    ll c=1;
    std::vector<ll> v;
    std::vector<ll> v1;
    for (int i = 0; i < n; ++i)
    {
        v.pb(i+1);
    }
    while(n>=2)
    {
        if(n==2)
        {
            cout<<"Final!"<<endl;
            return 0;
        }
        for (int i = 0; i < v.size(); i+=2)
        {
            if(v[i]==a && v[i+1]==b)
            {
                cout<<c<<endl;
                return 0;
            }
            if(v[i]==a || v[i+1]==a)
            {
                v1.pb(a);
                continue;
            }
            if(v[i]==b || v[i+1]==b)
            {
                v1.pb(b);
                continue;
            }
            v1.pb(v[i]);
        }
        v.clear();
        for (int i = 0; i < v1.size(); ++i)
        {
            v.pb(v1[i]);
        }
        v1.clear();
        n/=2;
        c++;
    }
    return 0;
}

//DPcoded

#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <iomanip>

using namespace std;

/*
ifstream in("input.txt");
ofstream out("output.txt");
#define In in
#define Out out
/**/
#define In cin
#define Out cout
/**/

#define all(x) x.begin(), x.end()
#define p2(x) (x) * (x)
#define FOR(i, a, b) for (int i = (a); i < (b); i++)
#define FORD(i, a, b) for (int i = (a); i >= (b); i--)

typedef long long ll;
typedef pair <int, int> ii;
typedef pair <ii, ii> pp;
typedef vector <int> vi;
typedef vector <string> vs;
typedef vector <char> vc;
typedef vector <ii> vii;
typedef vector <bool> vb;
typedef vector <vi> vvi;
typedef set <int> si;
typedef map <int, int> mii;

int main() {
	int n, a, b;

	In >> n >> a >> b;

	int cnt = 0;

	while (a != b) {
		cnt++;
		a = (a + 1) / 2;
		b = (b + 1) / 2;
	}

	int round = 0;
	while (n != 1) {
		n >>= 1;
		round++;
	}

	if (cnt == round) Out << "Final!";
	else Out << cnt;

	return 0;
}

#include <bits/stdc++.h>

using namespace std;

int main(){
	int i= 1;
	int a,b,c;
	cin >> a >> b >> c;

	b--; c--;
	while(a != 0){
		if(a == 2){
			cout << "Final!";
			return 0;
		}
		if(c/2 == b/2){
			cout << i << endl;
			return 0;
		}
		i++;
		c/=2;
		b/=2;
		a/= 2;

	}
}

#include <iostream>
#include <vector>
#include <string>
#include <set>
#include <map>
#include <functional>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cctype>
#include <cstdio>

using namespace std;

#define mp make_pair
typedef unsigned long long uint64;
typedef long long int64;

int64 gcd(int64 a,int64 b)
{
	if (a%b==0) return b;
	return gcd(b,a%b);
}

int main()
{
#ifdef KOCH
	freopen("abc.txt","r",stdin);
#else
	//freopen("input.txt","r",stdin);
	//freopen("output.txt","w",stdout);
#endif
	int n;
	cin>>n;
	int a,b;
	cin>>a>>b;
	int x=1;
	int n1=n;
	while(n1>1)
	{
		n1/=2;
		x++;
	}
	int res=0;
	for(int i=0;;++i)
	{
		n/=2;
		int n1=0;
		while(n1+n<a)
		{
			n1+=n;
		}
		int n2=0;
		while(n2+n<b)
		{
			n2+=n;
		}
		if (n1!=n2)
		{
			if (i==0) cout<<"Final!"<<endl;
			else
			{
				cout<<x-i-1<<endl;
			}
			return 0;
		}
	}
	return 0;
}

#include <iostream>

using namespace std;

int d[300][300];

int step(int n)
{
    int i = 0;
    while(n)
        i++, n /= 2;
    return i;
}
int main()
{
    string s;
    int a, b, n, f, ans;

    cin >> n >> a >> b;
    f = step(n);
    for(int i = 0; i < 256; i++)
        d[i][0] = i + 1;
    int k = 1;
    int j = 0;
    while(1)
    {
        bool bo = 0;
        for(int i = 0; i < n; i += k * 2)
            if((d[i][j] == a && d[i + k][j] == b) || (d[i][j] == b && d[i + k][j] == a))
                {
                    ans = j + 1;
                    bo = 1;
                    break;
                }
            else if(d[i][j] == b || d[i + k][j] == b)
                d[i][j + 1] = b;
            else if(d[i][j] == a || d[i + k][j] == a)
                d[i][j + 1] = a;
            else
                d[i][j + 1] = d[i][j];
        j++;
        k *= 2;
        if(bo)
            if(ans == f - 1)
                return cout << "Final!", 0;
            else
                return cout << ans, 0;
    }
    return 0;
}

#include<cstdio>
int main(){
	int n,a,b,menor,mayor,cont=1,aux;
	scanf("%d%d%d",&n,&a,&b);
	switch(n){
		case 2:
			aux=1;
			break;
		case 4:
			aux=2;
			break;
		case 8:
			aux=3;
			break;
		case 16:
			aux=4;
			break;
		case 32:
			aux=5;
			break;
		case 64:
			aux=6;
			break;
		case 128:
			aux=7;
			break;
		case 256:
			aux=8;
			break;
		default:
			break;
	}
	a--;
	b--;
	int aux1=a/2,aux2=b/2;
	while(aux1!=aux2){
		aux1/=2;
		aux2/=2;
		cont++;
	}
	if(cont==aux){
		printf("Final!\n");
	}
	else{
		printf("%d",cont);
	}

	return 0;
}

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int team[1010];
int main()
{
    int a,b,n,flag;
    scanf("%d%d%d",&n,&a,&b);
    for(int i=1;i<=n;i++)
        team[i]=i;
    flag=0;
    int cnt=0;
    int copy1=n;
    while(copy1!=1)
    {
        copy1=copy1/2;
        cnt++;
    }
    //cout<<cnt<<endl;
    int i;
    for(i=1;i<=cnt;i++)
    {
        int num=1;
        for(int j=1;j<=n;j+=2)
        {
            if((team[j]==a&&team[j+1]==b)||(team[j]==b&&team[j+1]==a))
            {
                flag=1;
                break;
            }
            else if(team[j]==a||team[j+1]==a)
                team[num++]=a;
            else if(team[j]==b||team[j+1]==b)
                team[num++]=b;
            else
                team[num++]=team[j];
        }
        if(flag==1)
            break;
    }
    if(i==cnt)
        printf("Final!\n");
    else
        printf("%d\n",i);
    return 0;
}

#include <bits/stdc++.h>
using namespace std;

int main()
{
    cin.tie(0);
    ios_base::sync_with_stdio(0);
    int n, a, b, res, pot = 1, tmp1, tmp2;
    bool band;
    res = 0;
    cin >> n >> a >> b;

    for(int i=1; ; i++)
    {
        pot *= 2;
        tmp1 = a>1? (a-1)/pot : 0;
        tmp2 = b>1? (b-1)/pot : 0;
        res++;
        if(tmp1==tmp2)
            break;
    }

    if(pot==n) cout << "Final!\n";
    else cout << res << "\n";
    return 0;
}

#include <bits/stdc++.h>
#define timesaver ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;

int main() {
    timesaver;

	int n,a,b;
	cin>>n>>a>>b;
	int half=n/2;
	if(a>=1 && a<=half && b>=half+1 && b<=n)
	cout<<"Final!";
	else if(b>=1 && b<=half && a>=half+1 && a<=n)
	cout<<"Final!";
	else
    {
        int pos1,pos2;
        if(a%2!=0)
        {
            pos1=a+1;
        }
        else
        pos1=a;

        if(b%2!=0)
        {
            pos2=b+1;
        }
        else
        pos2=b;
        int rounds=1;

        while(pos1!=pos2)
        {
            pos1=pos1/2;
            pos2=pos2/2;
            if(pos1%2!=0)
            pos1=pos1+1;
             if(pos2%2!=0)
            pos2=pos2+1;
            rounds++;

        }
        cout<<rounds;

    }

	return 0;
}

#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define mk make_pair

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    ll n, a, b;
    cin >> n >> a >> b;

    if (a > b)
    {
        swap(a, b);
    }

    a--;
    b--;

    ll ans=1;

    while (n > 2)
    {
        ll x = a / 2;
        ll y = b / 2;
        if(x==y)
        {
            cout<<ans<<endl;
            return 0;
        }
        a/=2;
        b/=2;
        n/=2;
        ans++;
    }

    cout<<"Final!"<<endl;

    return 0;
}

#include<cstdio>
#include<algorithm>
using namespace std;
int n,a,b,num[1005];
int main(){
	scanf("%d%d%d",&n,&a,&b);
	if(a>b){
		swap(a,b);
	}
	if(a<=n/2 && b>n/2){
		puts("Final!");
		return 0;
	}
	for(int i=2,k=1;i<n;i*=2,++k){
		for(int j=1;j<=n;++j){
			num[j]=(j-1)/i+1;
		}
		if(num[a]==num[b]){
			printf("%d\n",k);
			return 0;
		}
	}
	return 0;
}

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
const int N = 500;
int n,a,b,g[N];
bool vis[N];
int main() {
    scanf("%d%d%d",&n,&a,&b);
    if(a > b) {
        swap(a,b);
    }
    int nn = n, allTurn = -1;
    while(nn) {
        allTurn++;
        nn>>=1;
    }
    for(int i=1; i<=n; i++) {
        g[i] = i;
    }
    int all=n,turn=0;
    while(true) {
        ++turn;
        memset(vis,0,sizeof(vis));
        bool meet = false;
        for(int i=1; i<all; i+=2) {
            if(g[i]==a && g[i+1]==b) {
                meet = true;
                break;
            } else if(g[i]==a || g[i]==b) {
                vis[g[i+1]] = 1;
            } else if(g[i+1]==a || g[i+1]==b) {
                vis[g[i]] = 1;
            } else {
                vis[g[i]] = 1;
            }
        }
        if(meet) break;
        int cnt=0,g1[N];
        for(int i=1; i<=all; i++) {
            if(!vis[g[i]]) {
                g1[++cnt] = g[i];
            }
        }
        for(int i=1; i<=cnt; i++) {
            g[i] = g1[i];
        }
        all = cnt;
    }
    if(turn == allTurn) {
        printf("Final!\n");
    } else {
        printf("%d\n",turn);
    }
    return 0;
}

#include <iostream>
#include <vector>
#include <cmath>
#include <ctime>
#include <cassert>
#include <cstdio>
#include <queue>
#include <set>
#include <map>
#include <fstream>
#include <cstdlib>
#include <string>
#include <cstring>
#include <algorithm>
#include <numeric>

#define mp make_pair
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define forn(i, n) for (int i = 0; i < (int)(n); ++i)
#define for1(i, n) for (int i = 1; i <= (int)(n); ++i)
#define ford(i, n) for (int i = (int)(n) - 1; i >= 0; --i)
#define fore(i, a, b) for (int i = (int)(a); i <= (int)(b); ++i)

using namespace std;
int l, r;
int rounds;

int main()
{
  int n, a, b;
  cin >> n >> a >> b;
  int p = n;

  if(a > b)
    swap(a, b);

  if(a<=n/2&&b>n/2)
  {
    cout << "Final!\n";
    return 0;
  }

  rounds = log2(n);
  int lo = 1, hi = p;

  while(rounds)
  {
    int mid = (lo+hi)/2;
    if(a<=mid && b>mid)
    {
      cout << rounds << endl;
      return 0;
    }
    else if(a <= mid)
    {
      hi = mid;
    }
    else
    {
      lo = mid + 1;
    }
    rounds--;
  }
}

//code by - anand2000

#include<bits/stdc++.h>
using namespace std;

#define fast 		ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL);
#define ll  		long long int
#define vll 		vector < ll >
#define vpll 		vector < pair < ll,ll > >
#define pb 			push_back
#define mp 			make_pair
#define fr(i,a,b) 	for(i=a; i<b; i++)
#define fr1(i,a,b) 	for(i=a; i>=b; i--)
#define inf 		LLONG_MAX

/*-------Code Goes Here-------*/

int main()
{
	fast;
	ll t,i;
	t=1;
	fr(i,0,t)
	{
		int a,b,c;
		cin>>a>>b>>c;
		int k=0;
		while(b!=c)
		{
			b=b/2+b%2;
			c=c/2+c%2;
			k++;
		}
		if(pow(2,k)==a)
			cout<<"Final!";
		else
			cout<<k;
	}
	return 0;
}

#include<bits/stdc++.h>
using namespace std;
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int a,b,n,i,tmp,ans = 0;
    cin >> n >> a >> b;
    if (a > b)
        swap(a,b);
    if ((n / 2 + 0.5 - a) * (n / 2 + 0.5 - b) < 0)
    {
        cout << "Final!" << endl;
        return 0;
    }
    while (1)
    {
        ans++;
        if (abs(a - b) == 1 && (a % 2 == 1))
            break;
        a = (a + 1) / 2;
        b = (b + 1) / 2;
    }
    cout << ans << endl;
    return 0;
}

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <ctime>
#include <cassert>
#include <fstream>
#include <complex>
#include <string>
#include <cstring>

typedef long long ll;

using namespace std;

int main() {
    /*int a, b;
    cin >> a >> b;
    int diff = abs(a - b);
    int l1 = diff / 2;
    int l2 = diff - diff / 2;
    int s1 = l1 * (l1 + 1) / 2;
    int s2 = l2 * (l2 + 1) / 2;
    cout << s1 + s2 << endl;*/

    int n, a, b;
    cin >> n >> a >> b;
    int totalN = log2(n);

    int round = 0;
    while (a != b)
    {
        a = (a + 1) / 2;
        b = (b + 1) / 2;
        //cout<<a<<" "<<b<<endl;
        //totalN /= 2;
        round++;
    }

    if (totalN == round) {
        cout << "Final!";
    } else {
        cout << round;
    }

    return 0;
}

#include<bits/stdc++.h>
typedef long long int ll;
#define for(i,a,b) for(ll i=a;i<b;i++)
using namespace std;
int main()
{
ios::sync_with_stdio(0);
//cin.tie(0);

ll n=0,a=0,b=0;
cin>>n>>a>>b;
ll total_round=ceil((double)log10(n)/(double)log10(2));
//cout<<total_round;
ll round=total_round;
ll groupa=a ,groupb=b;
while(round!=0)
{
	 groupa=ceil((double)groupa/(double)2);
      groupb=ceil((double)groupb/(double)2);
	if(groupa==groupb&&round>1)
	{
		cout<<total_round-round+1;
		break;
	}
	else
	{
		if(round==1)
		cout<<"Final!";

	}
round--;
}
}

#include<bits/stdc++.h>
using namespace std;

int a,b,n;
int main(){
    cin >> n >> a >> b;
    a--; b--;
    for(int r = 2; r <= n; r *= 2)
        if(a/r == b/r){
            r == n? printf("Final!\n") : printf("%.0f\n", log2(r));
            return 0;
        }

    return 0;
}

#include <bits/stdc++.h>
using namespace std;

int main()
{
int c,a,b;
cin>>c>>a>>b;
a--;
b--;int r=0;

while(a!=b)
{
    a/=2;b/=2;c/=2;r++;
}
if(c==1)
    cout<<"Final!";else
    cout<<r;
}

#include <bits/stdc++.h>

#define fastIO ios_base::sync_with_stdio(0); cin.tie(0);
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("-O3")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define forn(i, a, b) for (int i = (a); i < (b); i++)
#define ford(i, a, b) for (int i = (b)-1; i >= (a); i--)
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define szof(x) ((int)(x).size())
#define rsz resize
#define lb lower_bound
#define ub upper_bound
#define INF (int)1e9
#define INFL (long long)1e18
#define re return
#define pb push_back
#define mp make_pair
#define ll long long
#define ld long double
#define PII pair<int,int>
#define VI vector<int>
#define VVI vector<vector <int> >
#define VVLL vector<vector <long long> >
#define VLL vector <long long>
#define mt make_tuple

using namespace std;

int main() {
    int n,a,b;
    cin >> n >> a >> b;
    set <int> s;
    for (int i = 1; i <= n; i++ ) {
        s.insert(i);
    }
    int cnt = 0;
    while (true) {
        cnt++;
        if (szof(s) == 2) {
            cout << "Final!\n";
            return 0;
        }
        set <int> t;
        for (auto it = s.begin(); it != s.end(); it++) {
            auto it2 = it;
            it2++;
            if (*it == min(a,b) && *it2 == max(a,b)) {
                cout << cnt << "\n";
                return 0;
            }
            if (*it == a || *it == b) {
                t.insert(*it);
            } else {
                t.insert(*it2);
            }
            it++;
        }
        swap(s,t);
    }
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
int n,a,b;
int main()
{
    cin>>n>>a>>b;
    if(a>b)swap(a,b);
    int k=1;
    while(b-a>1 || a%2==0)
        b=(b+1)/2,a=(a+1)/2,k++;

    if(pow(2,k)==n)
    {cout<<"Final!"<<endl;return 0;}
    else
    cout<<k<<endl;
}

/*
                                                             Hello World
GOD BLESS ME                                                                                GOD BLESS ME
*/
#include<iostream>
#include<string>
#include <sstream>
#include<vector>
#include<math.h>
#include<map>
#include<set>
#include<stdlib.h>
#include<stdio.h>
#include<algorithm>
#include<stack>
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
#define FAST ios_base::sync_with_stdio(0);   cout.tie(0);
#define LLMax LLONG_MAX
#define IMax INT_MAX
#define IMin INT_MIN
#define LLMin LLONG_MIN
#define GCD(a,b) __gcd(a,b)
#define LCM(a,b)  (a*b)/GCD(a,b)
#define CLR(A) memset(A,0, sizeof A)
#define Binary_Search(V,Value) binary_search(V.begin(),V.end(),Value); /// If finds value , return 1 otherwise return 0
#define Auto(ArrayOrStringOrVector)  for( auto I: ArrayOrStringOrVector)
#define ForI(S,E) for(ll I=S; I<=E; I+=1)
#define ForD(E,S) for(ll I=E; I>=S; I-=1)
#define Sz(S)  S.size()

int main()
{

   int N,M,A,B;
   vector< pair<int, int> >Team;
   cin>>N>>A>>B;
   for(int I=1; I<=N; I+=2)
   {
       Team.push_back(make_pair(I,I+1));
   }
   int F,S;
   long double R= log((long double)N)/log((long double)2);
    int Round=ceil(R);
   vector<int>V;
   for(int I=0; I<Team.size(); I++)
   {
       F=Team[I].first;
       S=Team[I].second;

       if( ((A==F && B==S ) ||(A==S && B==F)) && N==2)
       {
           cout<<"Final!"<<endl;
           return 0;
       }
       else if((A==F && B==S ) ||(A==S && B==F) )
       {
           cout<< 1 <<endl;
           return 0;
       }
       else{
         if(F==A || S==A )
         {

           V.push_back(A);
         }
         else if( (F==B|| S==B) )
         {
            V.push_back(B);
         }
         else
         {
            V.push_back(S);
         }
       }

   }

   int Count=2;
   int TempA=A,TempB=B;
   Team.clear();

   // cout<<Round<<endl;
   while(1)
   {
   for(int I=1; I<=V.size(); I+=2)
   {
         // F=V[I];
         Team.push_back(make_pair(V[I-1],V[I]));
   }
     V.clear();

   for(int I=0; I<Team.size(); I++)
   {
       F=Team[I].first;
       S=Team[I].second;

      if((A==F && B==S ) ||(A==S && B==F) )
       {

        if(Count==Round)
        {
        cout<<"Final!"<<endl;

        }
        else cout<<Count<<endl;
           return 0;
       }
       else{
           if(F==A || S==A )
           {
              V.push_back(A);
           }
           else if( F==B|| S==B )
            {
               V.push_back(B);
            }
           else
            {
            V.push_back(S);
            }
       }
  }

    Count+=1;

  //  V.clear();
    Team.clear();

   }

    return 0;
}

/*Thanks..... */

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int main(void){
	int n, a,b;
	cin>>n>>a>>b;
	if(a>b){
		swap(a, b);
	}
	a--;
	b--;
	vector<int> track(n);
	for(int i=0; i<n; i++){
		track[i] = i;
	}
	int round;
	int r = 1;
	while(1){
		int flag = 0;
		vector<int> temp;
		for(int i=0; i<track.size(); i+=2){
			if((track[i]==a && track[i+1]==b )|| (track[i]==b && track[i+1]==a)){
				if(r<log2(n))
				cout<<r<<endl;
				else
				cout<<"Final!"<<endl;
				return 0;
			}else if(track[i]==a || track[i]==b){
				temp.push_back(track[i]);
			}else if(track[i+1]==a || track[i+1]==b){
				temp.push_back(track[i+1]);
			}else{
				temp.push_back(track[i]);
			}
		}

		track = temp;
		r++;
	}
	cout<<r<<endl;
}

#include<bits/stdc++.h>
using namespace std;
int main(){
    int no,a,b,match;
    cin>>no>>a>>b;
    for(int i=1;i<=8;i++){
        if(pow(2,i)==no){
            match=i;
            break;
        }
    }
    int t = match;
    int high = no,low=1,mid=0;
    while(1){
        mid=(high+low)/2;
        if(a<=mid&&b>mid||b<=mid&&a>mid){
            if(t==match){
                cout<<"Final!";
                break;
            }
            else{
                cout<<t;
                break;
            }
        }
        else if(a<=mid&&b<=mid){
            high=mid;
        }
        else{
            low=mid;
        }
        t--;
    }
}

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n , m , k;
    cin>>n;
    cin>>m;
    cin>>k;

    int ans = 0,d = 0;
    int r = n/2;
    for(int i = 0 ;abs(ceil((1.0*m)/(1<<i)) - ceil((1.0*k)/(1<<i)))!=0;++i){
    ans++;
    }
    if(1<<ans >= n)cout<<"Final!";
    else cout<<ans;

}

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
	int rou,s,t,n,a,b;
	scanf("%d%d%d",&n,&a,&b);
	t=1;rou=0;
	while(t<n){t*=2;rou++;}
	if(a>b)swap(a,b);
	t=0;
	while(a!=b&&a&&b){
		t++;
		if(a%2==1)a++;
		if(b%2==1)b++;
		a/=2;
		b/=2;
	}
	if(t==rou)printf("Final!\n");
	else printf("%d\n",t);
	return 0;
}

#pragma warning(disable:4996)
#pragma comment(linker, "/STACK:336777216")
#pragma GCC optimize("Ofast")

#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <functional>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
#define int long long int
typedef complex<long double> cd;
const long double pi=acos(-1);
typedef double db;
typedef long double ldb;
typedef pair <int,int> pii;
typedef pair <db,db> pdd;
typedef vector<int> vi;
typedef vector<vector<int> > matrix;

#define m1 make_pair
#define pb push_back
#define flush fflush(stdout)
#define IOS std::ios::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL);
#define reset(x,v) memset(x,v,sizeof(x))

#define fi first
#define se second
#define endl "\n"
#define debug(x) (cerr << #x << ": " << x << "\n")
#define setbits(x) __builtin_popcount(x)
#define setbitsll(x) __builtin_popcountll(x)
#define all(x) x.begin(),x.end()
#define pii pair<int,int>

inline int gcd(int a,int b){if(a==0) return b;return gcd(b%a,a);}
inline int power(ll a,ll n,ll m){if(n==0)return 1;ll p=power(a,n/2,m);p=(p%m*p%m)%m;if(n%2) return (p%m*a%m)%m;else return p;}
const double EPS = 1e-9;
const ll MOD =998244353;
const ll hell=1000000007;
const int INF = 1e18;
const ll LL_INF = 0x3f3f3f3f3f3f3f3f;
template<typename T>
using ordered_set=tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>;

auto seed = chrono::high_resolution_clock::now().time_since_epoch().count();
std::mt19937 rng(seed);

double startTime;
double getCurrentTime() {
    return ((double)clock() - startTime) / CLOCKS_PER_SEC;
}
const int dx[] = { -1, 0, 1, 0 };
const int dy[] = { 0, 1, 0, -1 };

const int N=200005;
int lg2[301];

void solve()
{
    int n,a,b;
    cin>>n;
    cin>>a>>b;
    if(min(a,b)<=n/2 && max(a,b)>(n/2))
    {
        cout<<"Final!"<<endl;
        return;
    }
    int ans=abs(b-a)-1;
    //cout<<ans<<endl;
    ans=1+ lg2[ans+1];
    cout<<ans<<endl;

}

int32_t main()
{

    IOS;
    lg2[1]=0;
    for(int i=2;i<=300;i++)
        lg2[i]=1+lg2[i/2];
    int t;
    t=1;
    //cin>>t;
    while(t--)
    {
        solve();
    }
    return 0;
}

#include <iostream>
#include <math.h>
#include <string.h>

int main() {
	int n, a, b, min=1, max, middle, total=0, i=0;

	std::cin >> n >> a >> b;

	while (pow(2, total) != n) total++;
	max = n;
	middle = n / 2;
	while (true) {
		if ((a > middle && b <= middle) || (a <= middle && b > middle)) {
			i = log(n) / log(2) - i;
			break;
		}
		(a <= middle) ? max=middle : min=middle+1;
		middle = min + (max - min) / 2;
		i++;
	}
	(log(n) / log(2) == i) ? std::cout << "Final!" : std::cout << i;

	return 0;
}

#include <iostream>
#include <vector>
#include <cmath>
#include <iomanip>
#include <algorithm>
#include <string>
#include <set>
#include <map>
#include <math.h>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n, a, b, k = 0;
	cin >> n >> a >> b;
	if (a > b){
        int c;
        c = a;
        a = b;
        b = c;
	}
	for (int i = 1; i < (log(n) / log(2)); i++){
        if ((b - a == 1) && (b % 2 == 0)){
            cout << i;
            k = 1;
            break;
        }
        if (b % 2 != 0) b++;
        if (a % 2 != 0) a++;
        b = b / 2;
        a = a / 2;
	}
	if (k == 0){
        cout << "Final!";
	}
  return 0;
}

#include <iostream>
#include<bits/stdc++.h>
using namespace std;

//void Dijkstra( int start ){

//priority_queue<pair<ull,int>, vector<pair<ull,int>>,greater<pair<ull,int>>> Q;
//Q.push(make_pair(0,start));
//for(auto& d : dist) { d = numeric_limits<ull>::max(); } dist[start] = 0;
//for(auto& f : from) { f = -1; } from[start] = start;
//while (!Q.empty()){
//}

int main(){
	int n,a,b,c;
	double r;
	cin>>n>>a>>b;

	if(a>b){
		c=a;a=b;b=c;
	}
	if((a>n/2)&&(b>(n/2))){
		a=a-(n/2);b=b-(n/2);
	}
	r=(log(n)/log(2));
	int m=n;

	while(r>1){
		if ((a<=(n/2))&&(b>(n/2))){
			break;
		}
		else{
			r=r-1;
			n=n/2; //cout<<"n= "<<n<<endl;
		}
	}
	if(r==(log(m)/log(2))){
		cout<<"Final!";
	}
	else{
		cout<<r;
	}

	return 0;
}

#include <bits/stdc++.h>
#define pb push_back
#define sz(x) x.size()
#define F first
#define S second
#define mp make_pair
#define ll long long
#define sqr(x) ((x)*(x))
#define inf 4e18
using namespace std;
    ll a[2000010], d[2000010];
    ll b[200010], f[1010][1010];
    ll mn=inf, mx=-inf, ans, sm=1, cnt, n, m, cur;
    bool ok, u[1000010], uu[310][310];
    char c[510][510], cc[100010];
    int dx[4]={0, 1, 0, -1}, dy[4]={-1, 0, 1, 0};
    vector <ll> g[900010];

int main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);

    ll x, y;
    cin>>n>>x>>y;
    m=n;
    while(n>1){
    	cnt++;
    	n/=2;
    }
    mn=min(x, y);
    mx=max(x, y);
    if(m==2 && mx==2 && mn==1){
    	cout<<"Final!";
    	return 0;
    }
    for(int i=0;i<=m/2;i++){
    	if(mn==i*2+1 && mx==i*2+2){
    		cout<<1;
    		return 0;
    	}
    }

    ll z=1, mnn=0, mxx=0;
    while(z<=mn){
    	z*=2;
    	mnn++;
    	if(z>=mn){
    		break;
    	}
    }
    z=1;
    while(z<=mx){
        z*=2;
    	mxx++;
    	if(z>=mx){
    		break;
    	}
    }
    //cout<<mnn<<"  "<<mxx<<endl;
    if(mxx-mnn==cnt-1 || mxx==cnt && mnn!=cnt){
    	cout<<"Final!";
    	return 0;
    }
    else{
    	ll an=0, df=mx;

    	while(mx){
    		an++;
    		mx/=2;
    	}
    	df+=pow(2, an-1);
    	df-=mn;
    	while(df>1){
    		ans++;
    		df/=2;
    	}
    	cout<<ans;
    }

	return 0;
}

#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
#define ll long long
#define MAX 10000007
#define INF 1000000000000000000
#define PI acos(-1)
#define eps 1e-10
//#define ordered_set tree<long long,null_type,less<long long>, rb_tree_tag,tree_order_statistics_node_update>
//using namespace __gnu_pbds;
using namespace std;

int Log2n(int n)
{
    return (n>1) ? 1+Log2n(n/2) : 0;
}

int main()
{
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    ios_base::sync_with_stdio(false);
    //cin.tie(NULL);
    //cout.tie(NULL);

    //double n;
    int n,a,b;
    cin>>n>>a>>b;

    //double r=log2(n);
    int roundd=Log2n(n);

    int diff=abs(a-b), ans;

    if(diff==1 && max(a,b)%2)
    {
        ans=2;
    }else if(diff==1 && max(a,b)%2==0)
    {
        ans=1;
    }else
    {
        int t=diff/2;
        ans=t+1;
    }

    if(ans>=roundd)
        cout<<"Final!"<<endl;
    else
        cout<<ans<<endl;

    return 0;
}

#include <bits/stdc++.h>

using namespace std;

int main(){
	int n, a, b, x, y;

	cin >> n >> x >> y;
	a = min(x, y);
	b = max(x, y);

	int z = 1;
	int rounds = n;
	int v[n];

	for(int i = 0; i < n; i++) v[i] = i+1;
	bool flag = false;
	while(pow(2, z) != n){
		for(int i = 0; i < rounds; i += 2){
			if(v[i] == a || v[i+1] == a || v[i] == b || v[i+1] == b){
				if(v[i] == a && v[i+1] == b){
					flag = true;
					break;
				} else {
					if(v[i] == a || v[i] == b) v[i+1] = 0;
					else if(v[i+1] == a || v[i+1] == b) v[i] = 0;
				}
			} else v[i+1] = 0;
		}

		for(int i = 0; i < rounds; i++){
			if(v[i] == 0){
				int w = i;
				for(int j = i+1; j < rounds; j++){
					v[w] = v[j];
					w++;
				}
			}
		}

		if(flag) break;

		rounds = rounds/2;

		z++;

	}

	if(flag) cout << z << endl;
	else cout << "Final!" << endl;

	return 0;
}

// Author : deetav
// Happy stalking ! :P
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include <bits/stdc++.h>
using namespace std;
#define test int t; cin>>t; while(t--)
#define ll long long
#define ld long double
#define REP(i,a,b) for(ll i=a;i<b;i++)
#define REPI(i,a,b) for(ll i=a;i>b;i--)
#define ms(s, n) memset(s, n, sizeof(s))

const ld PI = acos(-1);
const int N = 1e5 + 10;
const int mod = 1e9 + 7;
const int mod1 = 998244353;
const ll INF = 2e18;

#define tr(it, a) for(auto it = a.begin(); it != a.end(); it++)//traverse through a dataset

template<class T> inline void amin(T& x, const T& y) { if (y < x) x = y; }
template<class T> inline void amax(T& x, const T& y) { if (x < y) x = y; }

int read() {
    ll s = 0, f = 1; char c = getchar();
    while (c < '0' || c>'9') { if (c == '-')f = -1; c = getchar(); }
    while (c >= '0' && c <= '9') { s = s * 10 + c - '0'; c = getchar(); }
    return s * f;
}

/*ll Pow(ll a,ll b)
{
    if (a == 1 || b == 1)
        return a;
    if (b%2==1)
        return (a*Pow(a,b-1))%MOD;
    return (Pow(a,b/2)*Pow(a,b/2))%MOD;
}
ll factorial(ll n) {
    ll ans = 1;
    while (--n)
        ans = (ans * (n + 1)) % MOD;
    return ans;
}*/

int main() {
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    //test
    {
        int n, a, b;
        int cnt = 0;
        cin >> n >> a >> b;
        int team[260];
        map <int, int> mp;
        ms(team, 0);
        for (int i = 1; i <= n; i++) {
            team[i] = i;

        }
        if ((a <= n / 2 && b > n / 2) || (a >= n / 2 && b < n / 2)) {
            cout << "Final!" << endl;
        }
        else {
            int k = abs((a + 1) / 2 - (b + 1) / 2) ;
            while (k) {
                k /= 2;
                cnt++;
            }
            cout << cnt + 1;
        }
    }
    return 0;
}

#include<bits/stdc++.h>
using namespace std;

main(){
    int n,a,b;
    cin>>n>>a>>b;
    if(b<a) swap(a,b);
    if(a%2==1) a++;
    if(b%2==1) b++;
    if(a<=n/2 and b>n/2 || n==2) {cout<<"Final!"; return 0;}
    int rounds=1;
    if(b==a) cout<<1;
    else{
        while(b-a>1){
            rounds++;
            b/=2;
            a/=2;
        }
        cout<<rounds;
    }
    return 0;
}

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#define lson pos<<1
#define rson pos<<1|1
//#define LOCAL

using namespace std;
typedef long long ll;
const int maxn=1e5+100;
const int maxx=3e5;
const int inf=0x3f3f3f3f;
const ll linf=1e9;
const ll mod=1e9+7;
int n;
double a,b;
int main(){
#ifdef LOCAL
    freopen("in.txt","r",stdin);
#endif
    ios_base::sync_with_stdio(false);
    cin>>n>>a>>b;
    int tot=1;
    while((1<<tot)<n) tot++;
    int ans=tot;
    double tmp=n/2+0.5;
    if(a>b)swap(a,b);
    while(1){
        if(a<tmp&&b>tmp) break;
        else if(a<tmp&&b<tmp) tmp-=tmp/2;
        else if(a>tmp&&b>tmp) tmp+=tmp/2;
        ans--;
    }
    if(ans==tot) cout<<"Final!"<<endl;
    else cout<<ans<<endl;
    return 0;
}

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a,b,tot,count=1;
cin>>tot;
   cin >> a;
   cin >> b;
   if(a>b)
    swap(a,b);
   while((b-a)!=1)
   {
       b=(b+1)/2;
       a=(a+1)/2;
       if((b-a)==1&&(b%2)==0&&(a%2)!=0)
       count++;

   }
    if(count==log2(tot))
       cout<<"Final!";
       else
       {
           cout<<count;
       }

   return 0;
}

#include <iostream>
#include <stdint.h>
#include <vector>
#include <algorithm>
#include <set>
#include <math.h>

using namespace std;

int main()
{
	int n, s=0, a, b;
	cin >> n >> a >> b;
	int k = n;
	int x = n;
	while (k)
	{
		if (k / 2 >= 0)
		{
			k /= 2;
			s++;
		}
	}
	s--;
	int y = 0,z=s;
	while (n!=2)
	{
		if (min(a,b) <= x / 2 && max(a,b) > x / 2)
			n /= 2;
		else
		{
			n /= 2;
			y++;
			z--;
		}
	}
	if (z == s) cout << "Final!" << endl;
	else cout << y << endl;
	return 0;

}

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a,b,fst,lst,mid,r=1,t,i;
    cin>>n>>a>>b;
    if(a>b)swap(a,b);
    t=n;
    fst=1;
    lst=n;
    while(t!=2)
    {
        t/=2;
        r++;
    }
    for(i=r;i>=1;i--)
    {
        mid=(fst+(lst-1))/2;
        if(a<=mid&&b>mid)
        {
            if(i==r)
            {
                cout<<"Final!"<<endl;
                break;
            }
            else{
                cout<<i<<endl;
                break;
            }
        }if(a>mid)
         fst=mid+1;
         else
            lst=b;

    }
    return 0;
}

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> v;
typedef vector<ll> vl;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;

#define rep(i,n) for (int i = 0; i < n; ++i)
#define REP(i,k,n) for (int i = k; i <= n; ++i)
#define REPR(i,k,n) for (int i = k; i >= n; --i)
#define inf (int)1e9
#define pb push_back
#define mp make_pair
#define print(x) cout << (x) << endl

int main()
{
    int n,a,b;
    cin>>n>>a>>b;
    if((a<=n/2 && b>n/2) || (a>n/2 && b<=n/2))
    {
        cout<<"FINAL!";
    }
    else
    {
        if(a%2==0)
        {
            a/=2;
        }
        else
        {
            a/=2;
            a+=1;
        }
        if(b%2==0)
        {
            b/=2;
        }
        else
        {
            b/=2;
            b++;
        }
        cout<<abs(a-b)+1;
    }
}

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n, a, b;
    cin >> n >> a >> b;

    double num = log(n)/log(2);
   // cout << fixed << setprecision(4) << num << endl;
    int cc = num;
   // cout << cc << endl;
    int cnt = 0, flag = 0;
    int q = 2;
    for(int j = 1; j <= n; )
    {
        if(flag) break;
        cnt++;
        for(int i = 1; i <= n; i += j + 1)
        {
            int l = i, r = i + j;
            if(l <= a && r >= a && l <= b && r >= b)
            {
                flag = cnt;
                break;
            }
        }
        j += q;
        q *= 2;
    }
    if(flag == num) cout << "Final!" << endl;
    else cout << flag << endl;

    return 0;
}

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a,b,i,x,y,z,k,l;
    cin>>n>>a>>b;
    x=min(a,b);
    y=max(a,b);
    z=n/2;
    if(x<=z && y>z)
    {
        cout<<"Final!"<<endl;
    }
    else
    {
        k=0;
        l=y-x;
        for(i=2; i<=y; i=i+(i*2))
        {
            k++;

        }
        cout<<k<<endl;
    }

}

#include <iostream>
#include <cmath>
using namespace std;
void team(int num_team , int start, int team1, int team2,double team_start){
	int mid = start + (num_team/2 -1);
	double round = log(num_team)/log(2);
	if((team1>mid && team2<=mid ) || (team1<=mid && team2>mid) ){
		if(round == team_start) cout<<"Final!"<<endl;
		else cout<<round;
		return;
	}
	else if(team1<=mid && team2<=mid){
		team(num_team/2 , start,team1,team2,team_start);
	}
	else{
		team(num_team/2,mid+1,team1,team2,team_start);
	}
}

int main(){
	int num_team,team1,team2;
	cin>>num_team>>team1>>team2;
	double start_team = num_team;
	double team_start = log(start_team)/log(2);
	team(num_team,1,team1,team2,team_start);
	return 0;
}

#include<cstdio>
#include<iostream>
using namespace std;
int main(){
	int n,a,b,sum;
	cin>>n>>a>>b;
	while(a!=b){
		if(a%2==1)a=a/2+1;
		else {
			a/=2;
		}
		if(b%2==1)b=b/2+1;
		else {
			b/=2;
		}
		sum++;
		n/=2;
	}
	if(n!=1)cout<<sum;
	else {
		cout<<"Final!";
	}
	return 0;
}

#include<iostream>
#include<bits/stdc++.h>
#include<cmath>
using namespace std;

int main()
{
	int n,a,b,c;
	int p;
	cin>>n>>a>>b;

	p=sqrt(n);

	if(a<=n/2 && b>n/2)
	{
		cout<<"Final!"<<endl;
		return 0;

	}

	if(a%2==0 && b%2==0)
	{
		c=(abs(a-b))/2;
		cout<<c+1<<endl;

		return 0;
	}

	else if(a%2!=0 && b%2!=0)
	{
		c=(abs(a-b))/2;
		cout<<c+1<<endl;
		return 0;
	}

	else
	{
		c=(abs(a-b))/2;
		cout<<c+1<<endl;
		return 0;
	}

	return 0;
}

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<vector>
#include<set>
#include<queue>
#include<limits.h>
#include<string.h>
#include<map>
#include<list>
using namespace std;
typedef long long ll;

#define inf int(0x3f3f3f3f)
#define mod int(1e9+7)
#define eps double(1e-6)
#define pi acos(-1.0)
#define lson  root << 1
#define rson  root << 1 | 1

ll n,a,b;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>n>>a>>b;
    int cnt=0;
    ll nn=n;
    while(nn)
    {
        nn/=2;
        cnt++;
        if(nn==1)
            break;
    }
    //cout<<cnt<<endl;
    int ji=1;
    ll x=min(a,b);
    ll y=max(a,b);
    if(x+1==y&&x%2==1)
    {
        if(n!=2)
            cout<<1<<endl;
        else if(n==2)
            cout<<"Final!"<<endl;
        return 0;
    }
    while(1)
    {
        if(x+1==y)
            break;
        ji++;
        x/=2;
        y/=2;
    }
    if(ji!=cnt)
        cout<<ji<<endl;
    else
        cout<<"Final!"<<endl;
}

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
	int team1, team2, counter = 1, size;
	cin >> size >> team1 >> team2;
	while (1)
	{
		if (team1 % 2 != 0){ team1++; }
		if (team2 % 2 != 0){ team2++; }
		team1 /= 2;
		team2 /= 2;
		if (counter == (log(size) / log(2)))
		{
			cout << "Final!" << endl;
			break;
		}
		else if (team1 == team2)
		{
			cout << counter << endl;
			break;
		}
		else
			counter++;
	}
}

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	__int64 n,a,b,c,d=0,d1,d2;
	cin>>n>>a>>b;
	c=(__int64)(log(n)/log(2));
//	if(log(n)/log(2)>(int)(log(n)/log(2)))
//	c += 1;
	d1=abs(a-b);
	d2=b;
	cout<<d;
	while(d1!=1)
	{
		d1=d1/2+d1%2;
		//d2=d2/2+d2%2;
		d++;
	}
	d++;
	if(d==c)
	cout<<"Final!";
	else
	cout<<d;
}

 #include<bits/stdc++.h>
	using namespace std;

    void codeforces(int x, int a, int b)
    {
            //how many 2 . Example :   8=2*2*2 So there are 3 twos in 8.
            int  bit = __builtin_clz(x);
            int sum=0;
            while(a!=b)
            {
                a=(a+1)/2;
                b=(b+1)/2;
                sum++;
            }
            if(sum==bit)
                cout<<"Final!";
            else
                cout<<sum;

    }

    int main()
    {
          int  a, b, n;
          scanf("%d%d%d",&n, &a, &b);
          codeforces(n, a, b);
          return 0;
    }

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n,a,b,dem=0;
int main()
{cin>>n>>a>>b;
if(abs(a-b)==1&&n!=2)
{
    cout<<"1";return 0;
}int i=abs(a-b);
if(min(a,b)<=n/2&&max(a,b)>=n/2)
{
    cout<<"Final!";
    return 0;
}
else {
         while(i!=0)
         {i=i/2;
           dem++;
         }
            cout<<dem;

}

}

//#include "stdc++.h"
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair

int main()
{
    ll n,a,b;
    cin>>n>>a>>b;
    ll tr=0;
    ll temp=n;
    while(temp!=1)
    {
        temp=temp/2;
        tr++;
    }
    ll diff=abs(a-b);
    if(diff>=(pow(2,tr-1)))
    {
        cout<<"Final!"<<endl;
        return 0;
    }

    if((a<=n/2 && b<=n/2) || (a>n/2 && b>n/2))
    {
    for(ll i=1;i<tr;i++)
    {
        if(diff<(pow(2,i)))
        {
            cout<<i<<endl;
            return 0;
        }
    }
    }

    else
    {
        cout<<"Final!"<<endl;
        return 0;
    }
}

#include <bits/stdc++.h>
using namespace std;

int arr[1000];
vector<int>v;

int main()
{
    int x,a,b,lol=0,f=0;
    cin >>x>>a>>b;

    for(int i=1; i<=x; i++)
    {
        arr[i] = i;
    }

    if(abs(a-b) >= x/2)
    {
        cout << "Final!" <<endl;
        return 0;
    }
    if(a==1 && b==2){
        cout << 1 <<endl;
        return 0;
    }
    if(a >= x/2 and b<=x/2){
        cout << "Final!" <<endl;
        return 0;
    }
    if(a <= x/2 and b >=
        x/2){
        cout << "Final!" <<endl;
        return 0;
    }

    while( 1 )
    {
        lol++;
        if(f==1)
        {
            for(int i=0; i<v.size(); i++)
            {
                // cout << v[i]<<endl;
                arr[i+1] = v[i];
            }
            x = v.size();
        }

        v.clear();

        for(int i=1; i<x; i+=2)
        {
            f=1;
            // cout << arr[i]<<endl;
            if( arr[i] == a || arr[i] == b )
            {
                v.push_back(arr[i]);
            }
            else
            {
                // cout << arr[i+1] <<endl;
                v.push_back(arr[i+1]);
            }
        }
        if(v.size() == 2) break;
        for(int i=0; i<v.size()-1; i+=2)
        {
            // cout << v[i] << " " << v[i+1] <<endl;
            if(v[i] == a && v[i+1]== b ) break;
            if(v[i] == b && v[i+1]== a ) break;
        }
    }
    cout << lol <<endl;
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
const int tai=10000;
int mapp[1000];

int main()
{
    //freopen("in.txt","r",stdin);
    memset(mapp,0,sizeof(mapp));
    int n,a,b;
    cin>>n>>a>>b;
    for(int i=0; i<=n; i++)
        mapp[i]=i;
    int m;
    m=n;
    int total=0;
    while(m)
    {
        m/=2;
        total++;
    }
    total--;
   // cout<<total;
    for(int t=1;; t++)
    {
        for(int i=1; i<=n; i+=2)
        {
            if((mapp[i]==a&&mapp[i+1]==b) || (mapp[i]==b&&mapp[i+1]==a))
            {
                if(t==total)
                    cout<<"Final!";
                else
                    cout<<t;
                return 0;
            }

            if(mapp[i]==a)
                mapp[i+1]=tai;
            else if(mapp[i+1]==a)
                mapp[i]=tai;
            else if(mapp[i]=b)
                mapp[i+1]=tai;
            else if(mapp[i+1]=b)
                mapp[i]=tai;
            else mapp[i]=tai;

        }
        sort(mapp+1,mapp+n+1);
    }
}

    #include<bits/stdc++.h>
    #define pb push_back

    #define ll long long int

    const ll mod=1000000007;

    #define maxVal(x,y) (x>y)?x:y
    #define minVal(x,y) (x<y)?x:y
    #define getMid(s,e) (s+(e-s)/2)
    #define mini INT_MIN
    #define maxi INT_MAX

    using namespace std;

    int main()
    {
        std::ios::sync_with_stdio(false);
        int n,a,b;
        cin>>n>>a>>b;
        int max = log2 (n);
        if(a>b)
        {
            int temp;
            temp =a ;
            a =b;
            b =temp;
        }
        int count = 1;
        if(a%2==1)
        {
            if(a==b-1)
            {
                cout<<count<<endl;
                return 0;
            }
        }
        while(a!=b-1^a%2!=1)
        {

            if(a%2==1)
            a++;
            if(b%2==1)
            b++;
            // cout<<a<<" "<<b<<endl;
            a = a/2;
            b = b/2;
            count++;
        }
        if(count == max)
        {
            cout<<"Final!"<<endl;
        }
        else
        {
            cout<<count<<endl;
        }
        return 0;
    }

#include<bits\stdc++.h>
using namespace std;
int fn(int,int,int);
int main()
{
	int n,a,b,x=1;
	cin>>n>>a>>b;
	int temp=n;
	if(a>b)
		swap(a,b);
	while(true)
	{
		if(a+1==b||n==2)
		{
			break;
		}
		else if(a<=n/2&&b>=n/2)
		{
			x+=log2(n)-1;
			break;
		}
		else
		{
			x++;
			a=max(max(a/2,(a+1)/2),1);
			b=max(max(b/2,(b+1)/2),1);
			n=n/2;
		}
	}
	if(x==log2(temp))
		cout<<"Final!";
	else
		cout<<x;
}

#include<bits/stdc++.h>
using namespace std;
#define rep0(i , n) for (long long int i=0;i<n;i++)
#define rep1(i , a , n) for (long long int i=a;i<=n;i++)
#define pb(x) push_back(x)
#define mp make_pair
#define fp first
#define sp second
typedef long long ll;
typedef vector<ll> vi ;
typedef vector<pair<ll , ll > >  vpi ;
ll m, n,t;
ll sum=0;
const int ma=3e5+5;
ll a[ma],b[ma],c[ma];
int main()
{

	cin>>n>>m>>t;

	if(abs(m-t)>=n/2)
	cout<<"Final!";
	else {
		ll a=min(m,t);
		ll b=max(m,t);
		while(1)
		{
		b=abs(b-a)/2;

		if(b==0)
		break;
		sum++;
		if(b==1)
		break;
		}
		cout<<1+sum;
	}
	return 0;

}

#include <iostream>

using namespace std;

int step(int n)
{
    int i = 0;
    while(n)
        i++, n /= 2;
    return i;
}

string dv(int a, int k)
{
    string s;
    while(a)
        s = (char)(a % 2 + '0') + s, a /= 2;
    while(s.size() < k - 1)
        s = '0' + s;
    return s;
}
int main()
{
    string s;
    int a, b, n, k;

    cin >> n >> a >> b;
    k = step(n);
    s = dv(max(a, b) - min(a, b), k);
    if(s[0] == '1')
        cout << "Final!";
    else
        for(int i = 1; i < n; i++)
            if(s[i] == '1')
                return cout << s.size() - i, 0;

    return 0;
}

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,a,b;
int main()
{
	#ifndef ONLINE_JUDGE
	freopen("input.txt", "r" , stdin);
	freopen("output.txt", "w" , stdout);
    #endif // ONLINE_JUDGE
	scanf("%d%d%d",&n,&a,&b);
	if(a>b)
		swap(a,b);
	if(a<=n/2&&b>n/2){
		printf("%s\n","Final!");
	}
	else
	{
		printf("%d\n",abs(a-b)/2+1);
	}

	return 0;
}

#include <iostream>
using namespace std;
int main()
{
    long round=1,team1,team2;
    cin>>team1>>team1>>team2;
    if( ((team1&1)==1)&&((team1+1)==team2))
        {
            cout<<1; return 0;
        }
    if( ((team2&1)==1)&&((team2+1)==team1))
        {
            cout<<1; return 0;
        }

       while(1)
        {
            round++;
            if((team1&1)==1)
                {
                    team1=(team1/2)+1;
                }
            else
                {
                    team1/=2;
                }
            if((team2&1)==1)
                {
                    team2=(team2/2)+1;
                }
            else
                {
                    team2/=2;
                }

                if(team1==team2)
                    {
                        if(team1!=1)cout<<round;
                        else cout<<"Final!";
                        return 0;

                    }
        }
}

#include <bits/stdc++.h>
#define ll long long
#define str string
#define pb push_back
#define sz() size()
#define ppb pop_back
#define mp make_pair
#define all(n) n.begin(), n.end()
#define timefaster ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
// solved by alikhan (KTL)(BIL);
using namespace std;
const ll N=1e9+5;
const ll T=1e6+123;
set <int> st;//set
map <string,int> mpstr; //multiset
ll a[101010],doua[666][666];//masiv
char q,ch[101010];//char
ll l,r,pref[101010];//prefix sum
ll ans,cnt,sum,max1,min1,ali;
//Function

//function
int main(){
	timefaster;
	ll n,w,e;
	str s;
	cin>>n>>w>>e;
	ans=n/2;
	if(ans<w && ans>=e || ans>=w && ans<e) cout<< "Final!";
	else cout<<(min(w,e))/2;
}
//AKSAY SILA;

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int main(void){
	int n, a,b;
	cin>>n>>a>>b;
	int totround = ceil(log2(n));
	int val = ceil(log2(abs(a-b)+1));
	if(val == totround){
		cout<<"Final!\n";
		return 0;
	}
	cout<<val<<endl;
}

#include <bits/stdc++.h>

using namespace std;

int n,a,b;

int main(){

    cin >> n >> a >> b;
    if (a>b) swap(a,b);

    int ans=0;
    while (a!=b){
        a=(a+1)/2;
        b=(b+1)/2;
        ans++;
    }

    if (ans*2==n){
        cout << "Final!" << endl;
    }
    else{
        cout << ans << endl;
    }
}

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
//#define PI 3.14

int main()
{
    int n,a,b;
    while(scanf("%d%d%d",&n,&a,&b)!=EOF)
    {
        int num=0,icount=1;
        while(n>1)
        {
            n/=2;
            num++;
        }
        int c=abs(a-b);
        if(c>=2)
        {
            while(c>1)
            {
                c/=2;
                icount++;
            }
        }
        if(num==icount)
            printf("Final!\n");
        else
            printf("%d\n",icount);
    }
    return 0;
}

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main(){
    ios_base::sync_with_stdio(false);

    //le n, a e b
    int n, a, b, round;
    cin >>n >>a >>b;

    //enquanto a!=b, faça:
    while(a!=b){

	//incremente a variavel round
	round++;

	// a=a/2+a%2 e b=b/2 + b%2, simulando cada round
	a=(a/2)+(a%2);
	b=(b/2)+(b%2);
    }

    //se round = log(n) -> chegaram a final. Imprima "Final!"
    if(round==(log(n)/log(2))) cout <<"Final!";

    //se não, imprima round
    else cout <<round;

    cout <<endl;

    return 0;
}

#include<bits/stdc++.h>
using namespace std;
const int maxn = 266;
int con[maxn/2][2];
int main()
{
	int n,a,b;
	cin>>n>>a>>b;
	int x=1,y=2;
	for(int i=0;i<n/2;i++)
	{
		con[i][0] = x;
		con[i][1] = y;
		x+=2;
		y+=2;
	}
	int s = 0,t = 0;
	for(int i=0;i<n/2;i++)
	{
		for(int j=0;j<2;j++)
		{
			cout<<con[i][j]<<" ";
			if(con[i][j]==a)
			{
				s = i;
			}
			if(con[i][j]==b)
			{
				t = i;
			}
		}
		cout<<endl;
	}
	int final = log(n)/log(2);

	 if(abs(t-s)+1<final)
	{
		cout<<abs(t-s)+1<<endl;
	}
	else
	{
		cout<<"Final!"<<endl;
	}

	return 0;
}

#include<bits/stdc++.h>
using namespace std;

int abs(int n){
	return n>0?n:-n;
}
int rec(int a, int b){

	if(abs(a-b)==1)
		return 1;
	if(a==b){
		return 0;
	}
	else{
		return rec((a+1)/2,(b+1)/2)+1;
	}
}

int main(){
	int n,a,b;
	cin>>n>>a>>b;
	int num=rec(a,b);
	if(num==ceil(log2(n))){cout<<"Final!";return 0;}
	cout<<num;
}

#include <iostream>
#define good "Final!"

using namespace std;
using ll = long long;
using ull = unsigned long long;

int main()
{
    ios::sync_with_stdio(false); cin.tie(NULL);
    int n, a, b;
    cin >> n >> a >> b;
    if (a > b)
        a^=b^=a^=b;
    int num = 1;
    while (n != 2)
    {
        if (a&1 && a < b || b&1 && b < a)
            break;
        a = a+1 >> 1;
        b = b+1 >> 1;
        ++num;
        n >>= 1;
    }
    if (n == 2)
        cout << good;
    else
        cout << num;
}

#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <float.h>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <set>
#include <queue>
#include <limits>
#include <deque>
#include <locale>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <wchar.h>
#include <wctype.h>
#include <algorithm>
#include <bitset>
#include <map>
#include <iomanip>
#include <ios>
#include <iostream>
#include <vector>
#include <cwchar>
#include <cwctype>
#define mp make_pair
#define fs first
#define se second
#define memset(a,t) memset(a,t,sizeof(a))
#define all(v) v.begin(),v.end()
#define MN 0LL
#define Mx 200000005
#define Mn -Mx
#define MX 20000000000000005
using namespace std;
int readint(){
	char c;
	while(c=getchar(),(c<'0'||c>'9')&&c!='-');
	bool flag=(c=='-');
	if(flag)c=getchar();
	int x=0;
	while(c>='0'&&c<='9'){
		x=x*10+c-48;
		c=getchar();
	}
	return flag?-x:x;
}
inline string tos(int x){
	string s;
	while(x) s=(char)(x%10+'0')+s,x/=10;
	return s;
}
inline int toi(string s){
	int rt=0;
	for(int i=0;i<s.size();i++) rt=rt*10+(int)(s[i]-'0');
	return rt;
}
int n,a,b;
inline int fd(int x){
	int rt=0;
	while(x>1){
		x/=2;
		rt++;
	}
	return rt;
}
int main(){
	int i,j,x;
	cin>>n>>a>>b;
	x=abs(a-b);
	int t=1,ans=1;
	while(t<x){
		ans++;
		t*=2;
	}
	if(t!=x) ans--;
//	cout<<fd(n)<<endl;
	if(ans==fd(n)){
		cout<<"Final!"<<endl;
		return 0;
	}
	cout<<ans<<endl;
	return 0;
}

#include<iostream>
#include<bits/stdc++.h>
#include<cmath>
using namespace std;

int main()
{
	int n,a,b,c;
	int p;
	cin>>n>>a>>b;

	if(a<=n/2 && b>n/2)
	{
		cout<<"Final!"<<endl;
		return 0;

	}

	if(a%2!=0 )
	a=a+1;

	if(b%2!=0)
	b=b+1;

	if(a%2==0 && b%2==0)
	{
		c=(abs(a-b));
		c=sqrt(c);
		cout<<c+1<<endl;

		return 0;
	}

	return 0;
}

#include<iostream>
#include<cstdio>
#include<cmath>
#include<stdbool.h>
#include<stdlib.h>
#include<limits.h>
#include<cctype>
#include<sstream>
#include<fstream>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
#include<deque>
#include<list>
#include<numeric>
#include<map>
#include<set>
#include<iterator>
#include<bitset>
#include<cassert>
#include<utility>
#include<complex>
#include<iomanip>
#include<functional>

using namespace std;

#define mp make_pair
#define PI acos(-1)

typedef long long int LL;

//LL a[100003];

int main(void)
{
	LL n,a,b,i,x,c=0;
	cin>>n>>a>>b;
	while(n) {
		n/=2;
		c++;
	}
	n=c-1;
	c=0;
	x=max(a,b)-min(a,b);
	while(x) {
		x/=2;
		c++;
	}
	if(c==n)
		cout<<"Final!"<<endl;
	else
		cout<<c<<endl;

	return 0;
}

#include <iostream>
#include <cmath>
using namespace std;
int main(){
int a,b,n,c,a1,b1,c1;
cin>>n>>a>>b;
a1=a/2+a%2;
b1=b/2+b%2;
c1=abs(b1-a1)+1;
if (pow(2,c1)>=n){cout<<"Final!";}else{cout<<c1;}
return 0;}

#include<iostream>
#include<math.h>

using namespace std;

int main()
{

	int size,x,y,counter=1;
	cin>>size>>x>>y;
	int sub =(x>y)? x-y:y-x;
	int size_=log(size)/log(2);
	while(1)
	{
		if(x%2!=0)
			x++;
		if(y%2!=0)
			y++;
		x/=2;
		y/=2;
		if(counter==size_)
		{
			cout<<"!Final";
			break;
		}
		else if (x==y)
		{
			cout<<counter;
		break;
		}
		counter++;
	}
	return 0;
}

#include <iostream>

using namespace std;
int n,a,b;
void input()
{
    cin>>n>>a>>b;
}
int ans()
{
    int m=n/2;
    if(((a>m)&&(b<=m))||((a<=m)&&(b>m)))return(0);
    int d=1;
    while((a-m)*(b-m)>0)
    {
        if((a>m)&&(b>m))
        {
            a-=m;
            b-=m;
        }
        d++;
        m=m/2;
    }
    return(d);
}
void output()
{
    int v=ans();
    if(v>0)cout<<v;
    else cout<<"Final!";
}
int main()
{
    input();
    output();
}

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,a,b;
int main()
{
	#ifndef ONLINE_JUDGE
	freopen("input.txt", "r" , stdin);
	freopen("output.txt", "w" , stdout);
    #endif // ONLINE_JUDGE
	scanf("%d%d%d",&n,&a,&b);
	if(a>b)
		swap(a,b);
	if(a<=n/2&&b>n/2){
		printf("%s\n","Final!");
	}
	else
	{
		int ans=1;
		while(b-a>1){
			ans++;
			b=(b+1)/2;
			a=(a+1)/2;
		}
		if(b%2!=0)
			ans++;
		printf("%d\n",ans );
	}

	return 0;
}

#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair
#define fast_cin() ios_base::sync_with_stdio(false)
using namespace std;
const int N = 1e5+7;

int main(){
    fast_cin();

    int n,a,b;
    cin >> n >> a >> b;

    if(a>b){
        swap(a,b);
    }
    pair<int,int> p[300];

    int t = n / 2;

    for(int i = 0,k = 1, j = 2; i < t; i++, k+=2, j+=2)
    {       p[i].first = k, p[i].second = j;
            //p[i].first.second = i + 1;

    }

    int ind1,ind2;
    for(int i = 0; i < t; i++)
    {
        if(p[i].first == a || p[i].second == a)
        {
            ind1 = i + 1;
        }
        if(p[i].first == b || p[i].second == b)
        {
            ind2 = i + 1;
        }
    }

    int ans = 0;
    bool ok = 0;

    for(int i = 0; i < t; i++)
    {
        if(p[i].first == a && p[i].second == b)
        {
            cout << i + 1;
            return 0;
        }
        if(p[i].first == a || p[i].second == a){
            for(int j = i+1; j < t; j++)
            {
                if(p[j].first == b || p[j].second == b)
                {
                    ans = j - i + 1;
                    ok = 1;
                    break;
                }
            }
            if(ok)
            {
                break;
            }
        }
    }
    if(ans == t - 1)
        cout << "Final!";
    else
        cout << ans;
    return (0);
}

#include<cstdio>
#include<algorithm>
#define rep(i,n,m) for(i=n;i<=m;i++)
using namespace std;
int read(){
	int w=0;char c=getchar();
	while(c<'0'||c>'9') c=getchar();
	while(c>='0'&&c<='9') w=w*10+c-48,c=getchar();
	return w;
}
int main(){
	int n,a,b,ans=0;
	n=read();a=read();b=read();
	if(a>b) swap(a,b);
	if(b-a==1){
		printf("1");return 0;
	}
	if(a<n/2&&b>n/2){
		printf("Final!");
		return 0;
	}
	while(a!=b&&n!=1){
		a=(a+1)/2;
		b=(b+1)/2;
		n/=2;
		ans++;
	}
	if(n!=1) printf("%d",ans);
	else printf("Final!");
	return 0;
}

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#include<cmath>
#include<set>
#include<iostream>
using namespace std;
#define ms(i, j) memset(i, j, sizeof i)
#define LL long long
#define db double
#define pr pair<int, int>
#define fir first
#define sec second
#define mp make_pair
int n, a, b;
void clean() {
}
int solve() {
	clean();
	if (a > b) swap(a, b);
	int c;
	if (b % 2 == 1) {
		c = (b - a + 1 + 1) / 2;
		if ((b - a + 1 + 1) % 2 == 1) c = (b - a + 1 + 1 + 1) / 2;
	} else {
		c = (b - a + 1) / 2;
		if ((b - a + 1) % 2 == 1) c = (b - a + 1 + 1) / 2;
	}
	int tmp = 1; for (int i = 1; i <= c; i++) tmp *= 2;
	if (tmp == n) cout << "Final!"; else cout << c;
	return 0;
}
int main() {
	cin >> n >> a >> b, solve();
	return 0;
}

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int n,a,b,l,r,t,flag;
int main()
{
    cin>>n>>a>>b;
    l=min(a,b);
    r=max(a,b);
    if(l<=n/2&&r>n/2)
    {
        cout<<"Final!"<<endl;
        return 0;
    }
    else
    {
        if(l>n/2)
        {
            if(l&2)
                l=l/2+1;
            else
                l/=2;
            if(r&2)
                r=r/2+1;
            else
                r/=2;
        }
        for(int i=0;i<=log2(n);i++)
        {
            if(l>=1&&l<=pow(2,i)&&r>pow(2,i)&&r<=pow(2,i+1))
            {
                t=i+1;
                break;
            }
        }
        cout<<t<<endl;
    }
    return 0;
}

#include <iostream>
#include <math.h>
#include <bits/stdc++.h>

using namespace std;

int min(int a,int b)
{
    if(a<b)
    {
        return a;
    }
    else if(a>=b)
    {
        return b;
    }
}
int max(int a,int b)
{
    if(a>b)
    {
        return a;
    }
    else if(a<=b)
    {
        return b;
    }
}

int main()
{
  int n,t1,t2;
  int a;
  int b;
  cin >>n;
  cin >>a;
  cin >>b;
  int h=n/2;
  int arr1[h];
  int arr2[h];
  int p=0;
  int q=0;

  for(int i=1;i<=n;i=i+2)
  {
      arr1[p]=i;
      p++;
  }

  for(int j=2;j<=n;j=j+2)
  {
      arr2[q]=j;
      q++;
  }

  int m1=min(a,b);
  int m2=max(a,b);

  if(m1%2==0 && m2%2==0 )
  {
      for(int i=0;i<h;i++)
      {
          if(m1==arr2[i])
          {
              t1=i;
          }
          if(m2==arr2[i])
          {
              t2=i;
          }
      }
  }
  else if(m1%2!=0 && m2%2!=0 )
  {
      for(int i=0;i<h;i++)
      {
          if(m1==arr1[i])
          {
              t1=i;
          }
          if(m2==arr1[i])
          {
              t2=i;
          }
      }
  }
  else if(m1%2==0 && m2%2!=0)
  {
       for(int i=0;i<h;i++)
      {
          if(m1==arr2[i])
          {
              t1=i;
          }
          }
          for(int i=0;i<h;i++)
      {
          if(m2==arr1[i])
          {
              t2=i;
          }
      }
  }
  else if(m1%2!=0 && m2%2==0)
          {
             for(int i=0;i<h;i++)
      {
          if(m1==arr1[i])
          {
              t1=i;
          }
      }
       for(int i=0;i<h;i++)
      {
          if(m2==arr2[i])
          {
              t2=i;
          }
      }

          }

  int d=abs(t1-t2);
  int s=h/2;

  if(t1<=s-1 && t2>=s)
  {
      cout <<"Final!";
  }
  else if((t1<=s-1 && t2<=s-1)  || (t1>=s && t2>=s))
  {
     if(t1==0 && t2==s-1 && t1!=t2)
     {
         int y=s*2;
         int l=log2(y);
         cout <<l;
     }
     else
     {
      cout <<d+1;
     }

  }

}

#include"bits/stdc++.h"
#define ll long long int
#define rep(i,n) for(ll i=0;i<n;i++)
#define repx(i,x,n) for(ll i=x;i<n;i++)
#define pb push_back
#define mp make_pair
#define all(a) a.begin(),a.end()
#define rall(a) a.rbegin(),a.rend()
#define boost ios_base::sync_with_stdio(false);cin.tie(0)
using namespace std;
#define llg(a) ll a; cin>>a;
#define start(t) llg(t); while(t--)
int main(){
	ll n,a,b;
	cin>>n>>a>>b;
	ll x=log2(n);
	ll c=ceil(a*1.0/2),d=ceil(b*1.0/2);
	//cout<<c<<" "<<d<<endl;
	ll y=abs(c-d)+1;
	ll z=log2(y)+1;
	if(z==x) cout<< "Final!";
	else cout<<z;
}

#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#define maxn 500
using namespace std;
int sum[maxn<<2],add[maxn<<2];
void pushup(int rt){
    sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void build(int l,int r,int rt){
    if(l==r){
        sum[rt]=1;
        return;
    }
    int m=(l+r)>>1;
    build(l,m,rt<<1);
    build(m+1,r,rt<<1|1);
    pushup(rt);
}
int query(int L,int R,int l,int r,int rt){
    if(L<=l&&R>=r){
        return sum[rt];
    }
    int m=(l+r)>>1;
    int ans=0;
    if(L<=m) ans+=query(L,R,l,m,rt<<1);
    if(R>m) ans+=query(L,R,m+1,r,rt<<1|1);
    return ans;
}
int main()
{
    int n;
    int a,b;
    cin>>n>>a>>b;
    build(1,n,1);
    int maxx=max(a,b);
    int minn=min(a,b);
    if(maxx>=n/2&&minn<=n/2) {puts("Final!");return 0;}
    int res=query(minn,maxx,1,n,1);
    if(res&1) res++;
    cout<<res/2<<endl;
}

#include<bits/stdc++.h>
using namespace std;
#define ll long long

int fx[]={+0,+0,+1,-1,-1,+1,-1,+1};//king move
int fy[]={-1,+1,+0,+0,+1,+1,-1,-1};

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);

 int n,result,a,b,fina,diff,dekha;
 cin>>n>>a>>b;

 for(int i=0;;i++)
 {
     if(pow(2,i)==n)
     {
         fina=i;
         break;
     }
 }

 if(a>b)
 {
     swap(a,b);
 }

 diff=abs(a-b);

 for(int i=0;;i++)
 {
     if(pow(2,i)>diff)
     {
         dekha=i;
         break;
     }
 }

 if(a<=n/2 && b>n/2)
 {
      cout<<"Final!"<<"\n";
      return 0;
 }

if(dekha==fina)
{
    cout<<"Final!"<<"\n";
}
else
{
    cout<<dekha<<"\n";
}

  return 0;
}

#include<bits/stdc++.h>
#define debugg(x) cout<<#x <<": "<< x<< endl;
typedef  long long ull;
using namespace std;
int main()
{
    int n , a , b;
    cin >> n >> a >> b;
    if((min(a , b)<=n/2)&& (max(a , b)> n/2))
    {
        cout << "Final!";
         return 0;
    }
    int binatum = abs(b-a);
    if(min(a , b)%2 ==0)
    {
        binatum++;
    }
    if(max(a , b)%2 !=0)
    {
        binatum++;
    }
    if(binatum%2 !=0)
    {
        binatum++;
    }
    int rou=0;
    while(binatum !=1)
    {
        binatum/=2;
        rou++;
    }
    cout<< rou;
     return 0;
}

#include<iostream>
#include<algorithm>
using namespace std;

int x,n, a, b;

int main()
{

	cin>>n>>a>>b;
	x=n;
	int level=0;
	int count=0;
	if (n==2)
		cout<<"Final";
	while (n>=2)
		{
			count++;
			n=n/2;
		}

	int result= abs(a-b);
	result= result/2;
	if (result>=count-1)
		cout<<"Final";
	else if (result<=count-1 && (a<=x/2 || b<=x/2))
		cout<<"Final";
	else
		cout<<result+1;

	return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull long long
#define ld long double
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    ll n,a,b;
    cin>>n>>a>>b;
    ll q = a<=(n/2)+(n%2);
    ll t = b<=(n/2)+(n%2);
    if (q!=t && !(n%2)) {cout<<"Final!";return 0;}
    bool q1 = true;
    if (abs(a-b)==1) {cout<<"1";return 0;}
    ll ans = 2;
    while (q1 || n) {
        a/=2;
        b/=2;
        n/=2;
        if (abs(a-b)==1) {cout<<ans;return 0;}
        ans++;
    }
    cout<<"Final!";
    return 0;
}

#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <float.h>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <set>
#include <queue>
#include <limits>
#include <deque>
#include <locale>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <wchar.h>
#include <wctype.h>
#include <algorithm>
#include <bitset>
#include <map>
#include <iomanip>
#include <ios>
#include <iostream>
#include <vector>
#include <cwchar>
#include <cwctype>
#define mp make_pair
#define fs first
#define se second
#define memset(a,t) memset(a,t,sizeof(a))
#define all(v) v.begin(),v.end()
#define MN 0LL
#define Mx 200000005
#define Mn -Mx
#define MX 20000000000000005
using namespace std;
int readint(){
	char c;
	while(c=getchar(),(c<'0'||c>'9')&&c!='-');
	bool flag=(c=='-');
	if(flag)c=getchar();
	int x=0;
	while(c>='0'&&c<='9'){
		x=x*10+c-48;
		c=getchar();
	}
	return flag?-x:x;
}
inline string tos(int x){
	string s;
	while(x) s=(char)(x%10+'0')+s,x/=10;
	return s;
}
inline int toi(string s){
	int rt=0;
	for(int i=0;i<s.size();i++) rt=rt*10+(int)(s[i]-'0');
	return rt;
}
int n,a,b;
inline int fd(int x){
	int rt=0;
	while(x!=1){
		x/=2;
		rt++;
	}
	return rt;
}
int main(){
	int i,j,x;
	cin>>n>>a>>b;
	x=abs(a-b);
	int t=1,ans=1;
	while(t<x){
		ans++;
		t*=2;
	}
	if(ans==fd(n)){
		cout<<"Final!"<<endl;
		return 0;
	}
	cout<<ans<<endl;
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
bool invoker(int q,int w)
{
   int a[200],i=0,j=0,x=1,y=2;
   for(i=0; i<=100; i++)
   {
       a[i]=x+y,x=y+1,y=x+1;
   }
   for(int j=0;j<=i;j++)
   {
       if(q+w == a[j++])
        return true;
   }
        return false;
}
int main()
{
    int val=1,a,b,n;
    cin>>n>>a>>b;
    if(a>b) swap(a,b);
    if(b-a==1)
    {
        if(invoker(a,b)==false){
              if(log2(n)==2)
                cout<<"Final!";
              else
                cout<<2;
        }
        else if(invoker(a,b)==true)
        {
            if(log2(n)==1) cout<<"Final!";
            else
                cout<<1;
        }
        return 0;
    }
    while(true)
    {
        a/=2,b/=2,val++;
        if(b-a == 1)
           break;
    }
    if(val>=log2(n))
        cout<<"Final!";
    else
        cout<<val;
    return 0;
}

///God is Almighty
#include<bits/stdc++.h>
using namespace std;
int main()
{
      int n,a,b,Fr,i,R,Tma,Tmb;
    double Final_Round;
cin>>n>>a>>b ;
       Tma=a;
       Tmb=b;
           Final_Round = ceil(log((double)n) / log((double)2));
           R=0;
           Fr = (int)Final_Round;
          // cout<<Fr<<endl;
         //vector< pair<int,int> >Pair;
         int A[n],see=0;
         queue<int>q;
         for(i=1; i<=n; i++)
         {
             A[i]=i;
         }
         for(i=1; i<n; i=i+2)
         {
             if((A[i]==Tma && A[i+1]==Tmb) || (A[i]==Tmb && A[i+1]==Tma)) {see++;
             cout<<see<<endl;
             return 0;
             }
         }
         for(i=1; i<=n/2; i++){
                a=((i-1)*2)+1;
                b=a+1;
         //Pair.push_back(make_pair(a,b));

         q.push(a);
         q.push(b);
         }
         int T1,T2;
         int F2;
         //int see=0;
         R=0;
         int c=0;
         see=1;
         R=1;
         queue<int>vt;
        while(R<=Fr){
         while(!q.empty())
         {
             //cout<<q.front();
             T1=q.front();
             q.pop();
             T2=q.front();
             q.pop();
             //se
             /*if(q.empty()) {
                    break;
             }*/
             //cout<<T1<<" "<<T2<<endl;
        if(T2>n) F2=T1;
             else {
             if(T1==Tma) vt.push(Tma);
             else if(T2==Tmb) vt.push(Tmb);
             else if(T2==Tma) vt.push(Tma);
             else if(T1==Tmb) vt.push(Tmb);
             else vt.push(T1);
             if((T1==Tma && T2==Tmb) || (T1==Tmb && T2==Tma)){
                    see=R;
                    // cout<<see<<endl;
             //return 0;
             }

             }

         }
        // q.clear();
         q=vt;

         R=R+1;
         }
         //see=R;
        // if(c==0)R=R+1;
         //}
          if(T1==Tma && T2==Tmb) cout<<"Final!"<<endl;
         //if(see==Fr)
         else cout<<see-1<<endl;
         //cout<<R<<endl;
//         int see=0;

   // }
    return 0;
}

#include <bits/stdc++.h>

//#define int long long

using namespace std;

signed main()
{
    int n, a, b;
    cin >> n >> a >> b;
    if(n / 2 < max(a, b)) cout << "Final!";
    else
    {
        while(n >= max(a, b)) n /= 2;
        cout << n;
    }
    return 0;
}

/**OOO**/
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define mems(x,y) memset(x,y,sizeof(x))
#define pf printf
#define sc scanf
using namespace std;

int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);

    int n,a,b;
    cin>>n>>a>>b;
    int dist=max(a,b)-min(a,b);

    int t1=min(a,b);
    int t2=max(a,b);

    if(t1<=n/2 && t2>n/2)cout<<"Final!"<<endl;
    else{
        int fin=log2(n);
    //cout<<"fin = "<<fin<<endl;

    double d=log2(dist)+1;
    int res=floor(d);

        cout<<res<<endl;
    }
return 0;
}

#include<bits/stdc++.h>
using namespace std;
int n, a, b, i;
main(){
    cin >> n >> a >> b;
    if((a <= n/2 && b >= n/2) || (b <= n/2 && a <= n/2)) cout << "Final!",exit(0);
    while(++i){
        int power = pow(2, i);
        for(int j = power; j <= n; j += power)
            if(a <= j && a >= j - power && b <= j && b >= j - power)
                cout << i,exit(0);
    }
}

#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
#define ll long long
#define MAX 10000007
#define INF 1000000000000000000
#define PI acos(-1)
#define eps 1e-10
//#define ordered_set tree<long long,null_type,less<long long>, rb_tree_tag,tree_order_statistics_node_update>
//using namespace __gnu_pbds;
using namespace std;

int Log2(int n)
{
    return (n>1) ? 1+Log2(n/2) : 0;
}

int main()
{
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    ios_base::sync_with_stdio(false);
    //cin.tie(NULL);
    //cout.tie(NULL);

    int n,a,b;
    cin>>n>>a>>b;

    int r=Log2(n);
    int diff=abs(a-b);
    int level=0;

    while((diff/(1<<level))>0)
            level++;

    if(level==r)
        cout<<"Final!"<<endl;
    else
        cout<<level<<endl;

    return 0;
}

#include<bits/stdc++.h>
#define ll long long
#define mod 1000000007
#define N 1000001
using namespace std;

int main(){

    int n, x, y;
    cin>>n>>x>>y;

    int a = min(x, y);
    int b = max(x, y);

    vector<int> v;

    for(int i = 0 ; i < n ; i++)
        v.push_back(i + 1);

    int round = 1;

    vector<int > nw;

    if(n == 2){
        cout<<"Final!";
        return 0;
    }

    do{
        sort(v.begin(), v.end());

        for(int i = 0 ; i < n ; i+=2){
            if(v[i] == a && v[i + 1] == b){
                if(n == 2) cout<<"Final!"<<endl;
                else cout<<round<<endl;
                return 0;
            }
            if(v[i] == a || v[i] == b)
                nw.push_back(v[i]);
            else if(v[i + 1] == a || v[i + 1] == b)
                nw.push_back(v[i + 1]);
            else
                nw.push_back(v[i]);
        }

        if(n/2 == round){
            cout<<"Final!";
            return 0;
        }

        v.clear();
        v = nw;
        nw.clear();
        round++;
        n = n/2;

    }while(n);

}

#include <algorithm>
#include <math.h>
#include <iostream>
#include <vector>

using namespace std;

typedef long long ll;

int main()
{
	ll n, a, b;
	cin >> n >> a >> b;
	if (b < a) {
		swap(a, b);
	}
	ll l = ceil(log2(n));
	ll res = l + 1;
	ll p = 1;
	for (ll i = 1; i <= l; i++) {
		if (b - a < p) {
			res = i;
			break;
		}
		p *= 2;
	}
	if (res > l) {
		cout << "Final!" << endl;
	} else {
		cout << res - 1 << endl;
	}
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double db;
typedef pair<int,int> pii;
typedef vector<int> vi;
#define de(x) cout << #x << "=" << x << endl
#define rep(i,a,b) for(int i=a;i<(b);++i)
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define lb(x) (x&-(x))
const int N = 101010;
int n,a,b,cnt=0,aaa=0;
int judge(int n,int a,int b)
{
	if(a>b)swap(a,b);
	if(a>n/2&&b>n/2)
	{
	cnt++;
	judge(n/2,a-n/2,b-n/2);//4
	}
	else if(a<=n/2&&b<=n/2)
	{
	cnt++;
	judge(n/2,a,b);
	}
	else return 0;
}
int main(){
scanf("%d%d%d",&n,&a,&b);
	aaa=(int)((log(n)*1.)/(1.*log(2)));
	if(n==8&&a==7&&b==5)
	{
	de(aaa);
	}
	judge(n,a,b);
	if(cnt==0) puts("Final!");
	else
	{
	printf("%d\n",aaa-cnt);
    }
	return 0;
}

#include<bits/stdc++.h>
int main()
{
    int n,a,b,f=0,m=1;
    scanf("%d%d%d",&n,&a,&b);
    if(abs(a-b)==1 && n==2){printf("Final!\n"); return 0;}
    else if(abs(a-b)==1){printf("1\n"); return 0;}
    while(n>1)
    {
        n/=2;
        m++;
        a=(int)((double)(a/2.0)+0.5);
        b=(int)((double)(b/2.0)+0.5);
        //printf("%d %d %d\n",a,b,n);
        if(abs(a-b)<=1&&n==2)
            f=1;
        else if(abs(a-b)<=1&&n>2)
            break;

    }
    if(f)printf("Final!\n");
    else printf("%d\n",m);
}

#include <bits/stdc++.h>
#define ll long long int
#define pb push_back
#define pii pair<int, int>
#define pll pair<ll, ll>
#pragma GCC optimize ("Ofast")
using namespace std;
int rnd (int total) {
    int c=0;
    while (total!=1) {
        total/=2;
        c++;
    }
    return c;
}
int main () {
    ios::sync_with_stdio(false);
    cin.tie (0);
    int n, a, b; cin>>n>>a>>b;
    if (abs(a+a%2-b-b%2)/2+1<rnd(n)) cout<<abs(a+a%2-b-b%2)/2+1;
    else cout<<"Final!";
    return 0;
}

#include <bits/stdc++.h>

using namespace std;
int n,a,b,res=1,val;
int main()
{
    cin>>n>>a>>b;
    for(int i=1;i<=8;i++){
       int z =pow(2,i);
        if(z==n) {
            val=i;
            break;
        }
    }
    if(n<=2 && b-a==1){
        cout<<"Final!";
        return 0;
    }
    if(b-a==1) {
        cout<<1;return 0;
    }
    else
    while(abs(b-a)!=1){
        a=a/2;
        b=b/2;
        res++;
    }
    if(res==val) cout<<"Final!";
    else cout<<res;
    return 0;
}

#include "stdio.h"
#include "math.h"
int findmatch(int a){
  if(a%2==0)
    return a/2;
  else
    return a/2 + 1;
}
int main(void) {
  int n,a,b;
  int rounds=0;
  scanf("%d",&n);
  scanf("%d",&a);
  scanf("%d",&b);
  while(1){
    ++rounds;
    a = findmatch(a);
    b = findmatch(b);
    if(a==b)
      break;
  }
  if(rounds==log(n)/log(2))
    printf("Final!");
  else
    printf("%d",rounds);
}

#include <iostream>
#include <cmath>
using namespace std;
void team(int num_team , int start, int team1, int team2,double team_start){
	int mid = start + (num_team/2 -1);
	double round = log(num_team)/log(2);
	if((team1>mid && team2<=mid ) || (team1<=mid && team2>mid) ){
		// cout<<"chk1 "<<endl<<"n_t "<<num_team<<endl;
		if(round == team_start){
			cout<<"team "<<team_start<<endl;
			cout<<"Final!"<<endl;
		}
		else cout<<round;
		return;
	}
	else if(team1<=mid && team2<=mid){
		// cout<<"chk2 "<<endl;
		team(num_team/2 , start,team1,team2,team_start);
	}
	else{
		// cout<<"chk3 "<<endl;
		team(num_team/2,mid+1,team1,team2,team_start);
	}
}

int main(){
	int num_team,team1,team2;
	cin>>num_team>>team1>>team2;
	double team_start = log(num_team)/log(2);
	// double x=log(8.00)/log(2.00);
	// cout<<x;
	team(num_team,1,team1,team2,team_start);
	return 0;
}

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
bool srt( pair < int , int > a, pair < int , int > b){
    return a.first != b.first ? a.first>b.first : a.second<b.second;
}
const ll oo=1e18;
int dx[8]={1,-1,0,0,1,-1,-1,1};
int dy[8]={0,0,1,-1,1,-1,1,-1};

int main(){
    int n,a,b;
    cin>>n>>a>>b;
    if(a<=n/2&&b>n/2){
        puts("Final!");
        return 0;
    }
    ll sum=0;
    if(a>b)swap(a,b);
    if(a%2==1)a--;
    if(b%2==1)b++;
    else cout<<(b-a)/2;

    return 0;
}

#include <bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    ll n,a,b;
    cin>>n>>a>>b;
    if (a>b) swap(a,b);
    ll x = -1e18;
    ll y = 1e18;
    ll r = 1;
    while ((x!=y) && ((a>0) && (b>0))) {
        //cout<<r<<'\n';
        if (a==1 && b==2) {cout<<r;return 0;}
        x = (a/2);
        y = (b/2);
        if (x==y) {cout<<r;return 0;}
        a/=2;
        b/=2;
        r++;
    }
    cout<<"Final!";return 0;
    }

/*
                                                             Hello World
GOD BLESS ME                                                                                GOD BLESS ME
*/
#include<iostream>
#include<string>
#include <sstream>
#include<vector>
#include<math.h>
#include<map>
#include<set>
#include<stdlib.h>
#include<stdio.h>
#include<algorithm>
#include<stack>
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
#define FAST ios_base::sync_with_stdio(0);   cout.tie(0);
#define LLMax LLONG_MAX
#define IMax INT_MAX
#define IMin INT_MIN
#define LLMin LLONG_MIN
#define GCD(a,b) __gcd(a,b)
#define LCM(a,b)  (a*b)/GCD(a,b)
#define CLR(A) memset(A,0, sizeof A)
#define Binary_Search(V,Value) binary_search(V.begin(),V.end(),Value); /// If finds value , return 1 otherwise return 0
#define Auto(ArrayOrStringOrVector)  for( auto I: ArrayOrStringOrVector)
#define ForI(S,E) for(ll I=S; I<=E; I+=1)
#define ForD(E,S) for(ll I=E; I>=S; I-=1)
#define Sz(S)  S.size()

int main()
{

   int N,M,A,B;
   vector< pair<int, int> >Team;
   cin>>N>>A>>B;
   for(int I=1; I<=N; I+=2)
   {
       Team.push_back(make_pair(I,I+1));
   }
   int F,S;
 double R= log((double)N)/log((double)2);
    int Round=(int)(R);

   vector<int>V;
   for(int I=0; I<Team.size(); I++)
   {
       F=Team[I].first;
       S=Team[I].second;

       if( ((A==F && B==S ) ||(A==S && B==F)) && N==2)
       {
           cout<<"Final!"<<endl;
           return 0;
       }
       else if((A==F && B==S ) ||(A==S && B==F) )
       {
           cout<< 1 <<endl;
           return 0;
       }
       else{
         if(F==A || S==A )
         {

           V.push_back(A);
         }
         else if( (F==B|| S==B) )
         {
            V.push_back(B);
         }
         else
         {
            V.push_back(S);
         }
       }

   }

   int Count=2;
   int TempA=A,TempB=B;
   Team.clear();

   // cout<<Round<<endl;
   while(1)
   {
   for(int I=1; I<=V.size(); I+=2)
   {
         // F=V[I];
         Team.push_back(make_pair(V[I-1],V[I]));
   }
     V.clear();

   for(int I=0; I<Team.size(); I++)
   {
       F=Team[I].first;
       S=Team[I].second;

      if((A==F && B==S ) ||(A==S && B==F) )
       {

        if(Count==Round)
        {
        cout<<"Final!"<<endl;

        }
        else cout<<Count<<endl;
           return 0;
       }
       else{
           if(F==A || S==A )
           {
              V.push_back(A);
           }
           else if( F==B|| S==B )
            {
               V.push_back(B);
            }
           else
            {
            V.push_back(S);
            }
       }
  }

    Count+=1;

  //  V.clear();
    Team.clear();

   }

    return 0;
}

/*Thanks..... */

#define LOCAL_DEFINEzxczx
using namespace std;
#include<bits/stdc++.h>
#define ll long long
#define lf long double
#define foru(i,a,b) for(int i = a,_b = b;i <= _b;++i)
#define ford(i,a,b) for(int i = a,_b = b;i >= _b;--i)
#define fi first
#define se second
#define pb push_back
#define rep(i,n) for(int i = -1;++i < n;)
#define all(x) x.begin(),x.end()
const ll MN = 1000005, mod =9929;
const int base = 1000000000; const int base_digits = 9;
bool check[50];
ll a[MN];
bool cmp(int a, int b){
	if(a>=b) return true;
	return false;
}
int my_size(ll a){
	int dem = 0;
	while(a>0){
		a/=10;
		dem++;
	}
	return dem;
}
ll my_pow(ll a, ll b){
	if(b == 1) return a;
	if(b == 0) return 1;
	ll s = my_pow(a,b/2);
	if(b%2==0) return s*s;
	return s*s*a;
}
bool kt(ll a, ll b){
	ll s = a + b;
	ll aa = my_size(a), bb = my_size(b), ss = my_size(s);
	if(aa != ss && ss != bb) return false;
	ll cs1 = s / my_pow(10,min(aa,bb));
	cs1 = cs1%10;
	ll cs2 = max(a,b) / my_pow(10,min(a,b));
	cs2 = cs2%10;
	if(cs1!=cs2) return false;
	return true;
}
int MOD;
int main(){
#ifdef LOCAL_DEFINE
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
#endif
    ll n , a , b;
    cin >> n >> a >> b;
    n*=2; a*=2; b*=2;

    ll tp = n+1,dem = 0;
    n/=2;

    // while(n%2==0){
   	// 	dem++;
    // }
    int cnt = log(n)/log(2);
    cnt ++;
    int x = 0;
    while(1){
    	tp/=2;
    	tp++;
    	x++;
    	if(tp <= min(a,b)){
    		a-=tp-1;
    		b-=tp-1;
    	}
    	if(tp < max(a,b) && tp >= min(a,b)) break;
    }

    if(x == 1 ) cout<<"Final!";
    else
    cout << cnt - x ;
#ifdef LOCAL_DEFINE
    cerr << "Time run : " << 1.0 * clock() / CLOCKS_PER_SEC << endl;
#endif
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
#define rep(i,n,m) for(int i=n;i<m;i++)
#define pb push_back
typedef long long int ll;
#define max(a,b) a>=b?a:b
#define min(a,b) a>=b?b:a
#define F first
#define S second
int main()
{
  int n,a,b;cin>>n>>a>>b;
  vector<int>v,v1;
  while(a>0)
  {
    v.pb(a%2);a/=2;
  }
  while(b>0)
  {
    v1.pb(b%2);b/=2;
  }
  rep(i,0,10)
  {
    v.pb(0);v1.pb(0);
  }
  int i;
  for(i=0;;i++)
  {
    if(v[i]!=v1[i]) break;
  }
  i++;
  if(pow(2,i)==n) cout<<"Final!"<<endl;
  else cout<<i<<endl;
}

#include <bits/stdc++.h>
#include<iostream>
#include<iomanip>
#include<cstring>
#include<map>
#define sz(v)   ((int)(v).size())
#define  all(v)    ((v).begin()),((v).end())
#define  allr(v)    ((v).rbegin()),((v).rend())
#define   pb         push_back
#define   mp         make_pair
#define   mt         make_tuple
#define    clr(v,d)      memset( v, d ,sizeof(v))
#define   angle(n)      atan2((n.imag()),(n.real()))
#define   vec(a,b)       ((b)-(a))
#define   length(a)      hypot( (a.imag()),(a.real()) )
#define   normalize(a)      (a)/(length(a))
#define    dp(a,b)          (((conj(a))*(b)).real())
#define    cp(a,b)          (((conj(a))*(b)).imag())
#define    lengthsqrt(a)       dp(a,a)
#define    rotate0( a,ang)    ((a)*exp( point(0,ang) ))
#define    rotateA(about,p,ang)   (rotate0(vec(about,p),ang)+about)
#define    lcm(a,b)                ((a*b)/(__gcd(a,b)))
#define    reflection0(m,v)         (conj((v)/(m))*(m))
#define     reflectionA(m,v,p0)     (conj( (vec(p0,v))/(vec(p0,m)) ) * (vec(p0,m)) ) + p0
#define     same(p1,p2)               ( dp(  vec(p1,p2),vec(p1,p2)) < eps )
//#define     point                    complex<double>
typedef  long long     ll ;
typedef  unsigned long long ull;
const double eps= (1e-5);
using namespace std;
int dcmp(long double a,long double b){   return fabsl(a-b)<=eps ? 0: (a>b)? 1:-1  ;}
ll getBit(ll num, int idx) {return ((num >> idx) & 1ll) == 1;}
int setBit1(int num, int idx) {return num | (1<<idx);}
ll setBit0(ll num, int idx) {return num & ~(1ll<<idx);}
ll flipBit(ll num, int idx) {return num ^ (1ll<<idx);}
void M(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);}
int countNumBit1(int mask) {int ret=0; while (mask) 	{mask &= (mask-1);++ret;	}return ret;}
ll power[19];
int main()
{
    ll n,a,b;
    cin>>n>>a>>b;
    ll sum=1;
    ll fin;
    for(int i=1;i<=9;i++)
    {
        sum*=2;
        power[i]=sum;
        if(sum==n)
            fin=i;
    }
    if(a>b)
        swap(a,b);
     ll diff= b-a+1;
     ll ans=0;
    for(int i=1;i<=9;i++)
    {
        if(diff==1)
            break;
        diff= ceil(diff/2.0);
        ans++;
    }

    if(ans==fin)
        cout<<"Final!\n";
    else
    cout<<ans;
}

#include<bits/stdc++.h>
#define debugg(x) cout<<#x <<": "<< x<< endl;
typedef  long long ull;
using namespace std;
int main()
{
    int n , a , b;
    cin >> n >> a >> b;
    if((a<=n/2)&& (b> n/2))
    {
        cout << "Final!";
         return 0;
    }
    int binatum = abs(b-a);
    if(min(a , b)%2 ==0)
    {
        binatum++;
    }
    if(max(a , b)%2 !=0)
    {
        binatum++;
    }
    if(binatum%2 !=0)
    {
        binatum++;
    }
    int rou=0;
    while(binatum !=1)
    {
        binatum/=2;
        rou++;
    }
    cout<< rou;
     return 0;
}

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#define pb push_back
#define pf push_front
#define F first
#define S second
#define ins insert
#define int long long
#define fbo find_by_order
#define ook order_of_key
using namespace std;
using namespace __gnu_pbds;
typedef pair<int,int> pii;
typedef pair<pii,int> piii;
typedef tree<int,null_type,less<int>,rb_tree_tag,
tree_order_statistics_node_update> indexed_set;
const int MAXN=1e5+1,INF=1e18+10,MOD=1e9+7;

int a,b,n,c;

int32_t main(){
	ios_base::sync_with_stdio(0);
	cin>>n>>a>>b;
	c=abs(a-b);
	int t=0;
	while(c!=1){
		c=(c+1)/2;
		t++;
	}
	if(t+1>=log2(n)){
		cout<<"Final!\n";
	}else{
		cout<<t+1<<endl;
	}
	return 0;
}

/**
    contest : CF Round #468 (based on Final Round of Technocup)
    country : Belarus
    author : eilur
    problem : B
*/

#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <algorithm>
#include <sstream>
#include <queue>
#include <deque>
#include <bitset>
#include <iterator>
#include <list>
#include <stack>
#include <map>
#include <set>
#include <functional>
#include <numeric>
#include <utility>
#include <limits>
#include <time.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <cassert>
#include <cstdio>
#include <list>

using namespace std;

template <class T> T gcd(T a , T b) {  if(b == 0) return a ; return gcd(b , a % b);  }
template <class T> T lcm (T a , T b) {  return (a * b) / gcd(a , b); }

#define i_base ios_base::sync_with_stdio(false)
#define tie_false cin.tie(NULL);
#define fastread i_base ; tie_false;
#define fstreadIset_files fastread ; ifstream cin("input.txt"); ofstream cout("output.txt");
#define N 2050
#define mp             make_pair
#define pb             push_back
#define fi             first
#define se             second
#define sz(x)          (int)((x).size())
#define fill(x, y)     memset(x, y, sizeof(y))
#define all(x)         (x).begin(), (x).end()
#define sci(x)         int x;       scanf("%d", &x);
#define scii(x, y)     int x, y;    scanf("%d %d", &x, &y);
#define sciii(x, y, z) int x, y, z; scanf("%d %d %d", &x, &y, &z);
#define TC(x)          sci(x); while(x --)
#define eprintf(...)   fprintf(stderr, __VA_ARGS__)
#define debug(x)       { cerr << #x << " = " << x << endl; }
#define rep(i, x, y)   for (__typeof(x) i = x; i <= y; i ++)
#define repi(i, x, y)  for (__typeof(x) i = x; i >= y; i --)
#define fore(itr, x)   for (__typeof(x.begin()) itr = x.begin(); itr != x.end(); itr ++)
#define forei(itr, x)  for (__typeof(x.end()) itr = x.end() - 1; itr != x.begin() - 1; itr --)
#define INF (int)1e9
#define EPS 1e-9
#define PI 3.1415926535897932384626433832795
#define module 1000000007

typedef  long long ll;
typedef  map <string,int>  msi;
typedef  map <int,int> mii;
typedef  map <ll, ll>  mll;
typedef  map <char,int>  mci;
typedef  map <int,string>  mis;
typedef  pair <int,int> pii;
typedef  pair <string, int>   psi;
typedef  pair <string, string> pss;
typedef  vector <int> vi;
typedef  vector <string> vs;
typedef  vector <char> vc;
typedef  vector <bool> vb;
typedef  vector < pii > vii;

vector <int> t;

bool com(int a , int b) {
    if (b == -1) b = pow(10 , 9);
    if (a == -1) a = pow(10 , 9);
    return a < b;
}

int dfs(int nn) {
    int st = 0;
      while (nn > 1) {
        nn /= 2;
        st++;
    }
    return st;
}

signed main() {

    int n , a , b , l , r;

    cin >> n >> a >> b;

    int nn = n , st = dfs(nn);

    int ds = dfs(nn);

    if (a > b) {
        swap(a , b);
    }

    l = 1;

    r = n;

    while (true) {

        r /= 2;
        st = dfs(r);
        if ((a < r && b >= r) || (a <= r && b > r)) {
                if (st == ds) {

                    cout << "Final!" << endl;
                    return 0;
                }
            printf("%d" , st);
            return 0;
        } else {cout <<  dfs(r) << endl; return 0; }

    }

    return 0;
}

#include<bits/stdc++.h>
using namespace std;

#define ll                     long long
#define loop( i,a)             for(i=0;i<a;i++)
#define loop1(i,a)             for(i=1;i<=a;i++)
#define ppp(a)                 cout<<a<<endl;
#define ssd(a)                 scanf("%lf",&a)
#define ssi(a)                 scanf("%d",&a)
#define ssl(a)                 scanf("%ld",&a)
#define ssc(a)                 scanf("%c",&a)
#define FOR(i,a,b)             for(i=a;i<b;i++)
#define FORE(i,a,b)            for(i=a;i<=b;i++)
#define reved(s)               reverse(s.begin(),s.end())
#define inf                    9000000000000000
#define pii                    3.1415926536
#define pb(a)                  push_back(a)
#define pppp(a,b)              cout<<a<<"  "<<b;
#define newline                printf("\n");
#define sorted(a)              sort(a.begin(),a.end())
#define bsorted(a)             sort(a.begin(),a.end(),greater<ll>())

int rnd(int a,int b,int st,int fn,int rr)
{
    int md=(st+fn-1)/2;
    if((fn-st+1)==2)
        return 2;
    if(a<=md&&b<=md)
    {
        return rnd(a,b,st,md,rr);
    }
    else if(a>=md&&b>=md)
    {
        return rnd(a,b,md+1,fn,rr);
    }
    else
        return (fn-st+1);
}

int main()
{
    int a,b,t,ans;
    cin>>t>>a>>b;
    if(a<=t/2&&b>t/2)
    {
        ppp("Final!");
        return 0;
    }
    if(b<=t/2&&a>t/2)
    {
        ppp("Final!");
        return 0;
    }
    ans=rnd(a,b,1,t,1);
    for(ll i=0;i<10;i++)
    {
        if(1<<i==ans)
        {
            ppp(i)
            return 0;
        }
    }
    return 0;
}

#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define mod 1000000007
#define pb push_back
#define pi pair<int,int>
#define vi vector<int>
#define vpi vector< pi >
const int N=1000010;
vi v;
int n,a,b;
void hh()
{
    if(v.size()==2) return;
    vi w;
    for(int i=1;i<v.size();i++)
    {
        if(v[i]==a&&v[i-1]==b) return;
        else if(v[i]==a||v[i]==b)
            w.pb(v[i-1]);
        else
            w.pb(v[i]);
        i++;
    }
    v.clear();
    for(int x:w)
        v.pb(x);
    hh();

}
int main()
{

    cin>>n>>a>>b;
    if(a>b)
        swap(a,b);
    for(int i=1;i<=n;i++)
        v.pb(i);
    hh();
    if(v[0]==a&&v[1]==b)
        printf("final");
    else
    {
        int res=1;
        while(n!=v.size()) n/=2;
        cout<<res;
    }

    return 0;
}

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll i,j,m,n,p,q,r,s,c,a,b,aa[200];
int main()
{
    cin>>n>>a>>b;
    p=n/2;
    if(b<a)
        swap(a,b);
     if(a>p)
        {
        a=abs(p-a);
        b=abs(p-b);
        }
    if(b>p&&a<=p)
    cout<<"Final!";
    else
    {
        while(p)
        {
            p/=2;
             if(b>p&&a<=p)
             {
                 while(p)
                 {
                     c++;
                     p/=2;
                 }
                 cout<<c;
                 return 0;
             }
        }
    }
}

#include <bits/stdc++.h>
using namespace std;
typedef long long ll ;
typedef double    dl ;
#define INF 0x7f

const int  inf = 987654321;
const int sz = 1e6 + 5;
const int mod = 1e9 + 7;
const int sqrtn = 300;

#define f(i,l,r) for(int i=l;i<=r;++i)
#define g(i,l,r) for(int i=l;i>=r;--i)
#define CLR(arr,val) memset(arr,val,sizeof(arr))
#define FAST_IO ios::sync_with_stdio(false);cin.tie(0);
#define pii pair<int,int>
#define lowbit(x) x&(-x)
#define X first
#define Y second
int n,a,b,c;
void work()
{
    cin>>n>>a>>b;
    if(a>b)swap(a,b);
    while(a%2 && a!=b-1)
    {
        if(a%2) a=a/2+1;
        else a/=2;
        if(b%2) b=b/2+1;
        else b/=2;
        c++;
        n/=2;
    }
    if(n==2)  cout << "Final!"<<endl;
     else cout << c+1<<endl;

    return ;

}

int main()
{
    FAST_IO ;

    work();

    return 0;
}

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#define rep(i,x,y) for(register int i=x;i<=y;++i)
#define repd(i,x,y) for(register int i=x;i>=y;--i)
#define ll long long
using namespace std;
int n,a,b,ans=1,t;

int main(){
	cin>>n>>a>>b;
	t=log(n)/log(2);
	if(a<b)swap(a,b);
	a=(a+1)/2;b=(b+1)/2;
	while(a!=b){
		a=(a+1)/2;b=(b+1)/2;
		ans++;
	}
	if(t!=ans)cout<<ans<<endl;
	else cout<<"Final!"<<endl;
}

#include <bits/stdc++.h>

using namespace std;
int n,a,b,res=1,val;
int main()
{
    cin>>n>>a>>b;
    for(int i=1;i<=8;i++){
       int z =pow(2,i);
        if(z==n) {
            val=i;
            break;
        }
    }
    if(n<=2 && b-a==1){
        cout<<"Final!";
        return 0;
    }
    if(b-a==1) {
        cout<<1;return 0;
    }
    else
    while(abs(b-a)!=1){
        a=a/2;
        b=b/2;
        res++;
    }
    if(res==val) cout<<"Final!";
    else cout<<res;
    return 0;
}

#include<bits/stdc++.h>
using namespace std;

int abs(int n){
	return n>0?n:-n;
}
int rec(int a, int b){
	int sum=1;
	while(abs(a-b)!=1){
		a=(a+1)/2;
		b=(b+1)/2;
		sum++;
	}
	return sum;
}

int main(){
	int n,a,b;
	cin>>n>>a>>b;
	int num=rec(a,b);
	if(num==ceil(log2(n))){cout<<"Final!";return 0;}
	cout<<num;
}

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
    int n, a, b;
    cin >> n >> a >> b;
    for (int i = 0; 1 << i < n; ++i) {
        a += a & (1 << i), b += b & (1 << i);
        if (a == b) return cout << i + 1, 0;
    }
    cout << "Final!";
}

#include <bits/stdc++.h>

using namespace std;

#define Tupizm ios_base :: sync_with_stdio(0), cin.tie(0), cout.tie(0);

#define ONE exit(0);
#define nl "\n"

#define ff first
#define ss second

#define bb begin()
#define ee end()

#define pb push_back
#define ppb pop_back

#define ub upper_bound
#define lb lower_bound

#define maxe max_element
#define mine min_element

#define all(x) x.begin(), x.end()

#define sz(x) (int) x.size()

typedef long long ll;
typedef double db;

const int N = 1e5 + 5;
const int M = 1e9 + 7;

int n, a, b;
int c[N];
int main(){

    //freopen(".in", "r", stdin);
    //freopen(".out", "w", stdout);

    Tupizm

    cin >> n >> a >> b;
    if(a > b){
        swap(a, b);
    }
    for(int i = 1; i <= n; ++i){
        c[i] = i;
    }
    int ok = 1;
    int q = 0;
    int ans = n;
    while(ok == 1){
        q++;
        if(q >= ans){
            cout << "Final!" << nl;
            ONE
        }
        for(int i = 1; i <= n; i += 2){
            if(c[i] == a && c[i + 1] == b){
                cout << q << nl;
                ONE
            }
        }
        int d[N];
        int w = 0;
            w++;
        for(int i = 1; i <= n; i += 2){
            if(i + 1 == a || i + 1 == b){
                d[w] = i + 1;
            }
            else{
                d[w] = i;
            }
        }
        for(int i = 1; i <= w; ++i){
            c[i] = d[i];
        }
        for(int i = w + 1; i <= ans; ++i){
            c[i] = 0;
        }
        n /= 2;
    }
    return 0;
}

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <cmath>
#include <ctime>
#include <map>
#include <unordered_map>
#include <stack>
#include <set>
#include <unordered_set>
#include <string>
#include <cstring>
#include <bitset>
#include <limits>
#include <climits>
#include <queue>
#include <deque>
#include <list>
#include <forward_list>
#include <complex>
#include <sstream>
#include <cassert>
#include <functional>
#include <tuple>
#include <array>
#include <locale>
#include <cstdio>
//#include <bits/stdc++.h>
using namespace std;

#define fin freopen("input.txt", "r", stdin);
#define fout freopen("output.txt", "w", stdout);
#define cp(x) cout.setf(ios::fixed); cout.precision(x);
#define rep(i, x, n) for(int i = x; i <= n; ++i)
#define add push_back
#define del pop_back
#define mp make_pair
#define fr first
#define sc second
#define vc vector
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define mem(a,b) memset(a, b, sizeof(a))
#define cpy(a,b,x) memcpy(a, b, sizeof(x))
#define prt(x) printf("%d", x);
#define lprt(x) printf("%lld", x);
#pragma warning(disable:4996)
#pragma comment(linker, "/STACK:336777216")
//#pragma GCC optimize("unroll-loops")
//define DEBUG

typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ld;

typedef map <int, int> mii;
typedef unordered_map <int, int> ump;
typedef pair <int, int> pii;
typedef vector <int> lnum;
typedef vector <int> vi;
typedef vector < vector <int> > vii;
typedef priority_queue <int> pqi;

inline int nxt() { int x; scanf("%d", &x); return x; }
inline long long lnxt() { long long x; scanf("%I64d", &x); return x; }

//mt19937 gen(time(NULL));
const int base = (int)1e9;
const int N = (int)1e6 + 100;
const int MAXN = (int)1e3 + 100;
const int MOD = (int)1e9 + 7;
const int INF = INT_MAX;
const long long LL_INF = LLONG_MAX;
const long double PI = acos((ld)-1.0);
const long double EPS = 1e-8;

long long cnt = 0, ans = 0;

void solve() {
	int n, a, b; scanf("%d%d%d", &n, &a, &b);
	int tmm = log2(n);
	int i = abs(b - a);
	int j = log2(i);
	if (++j == tmm) {
		cout << "Final!\n";
	}
	else {
		cout << j << endl;
	}
}

int main() {
	//ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

	//#define FREOPEN
#ifdef FREOPEN
#ifndef _MSC_VER
#define TASK ""
	freopen(TASK".in", "r", stdin);
	freopen(TASK".out", "w", stdout);
#endif
#endif

	//fin; fout;

	int T = 1;
	//scanf("%d", &T);

	for (; T; --T) solve();

#ifdef DEBUG
	cerr << double(1.0 * clock() / CLOCKS_PER_SEC) << '\n';
#endif

	return 0;
}