The last stage of Football World Cup is played using the play-off system.There are n teams left in this stage, they are enumerated from 1 to n. Several rounds are held, in each round the remaining teams are sorted in the order of their ids, then the first in this order plays with the second, the third — with the fourth, the fifth — with the sixth, and so on. It is guaranteed that in each round there is even number of teams. The winner of each game advances to the next round, the loser is eliminated from the tournament, there are no draws. In the last round there is the only game with two remaining teams: the round is called the Final, the winner is called the champion, and the tournament is over.Arkady wants his two favorite teams to play in the Final. Unfortunately, the team ids are already determined, and it may happen that it is impossible for teams to meet in the Final, because they are to meet in some earlier stage, if they are strong enough. Determine, in which round the teams with ids a and b can meet.

The only line contains three integers n, a and b (2 ≤ n ≤ 256, 1 ≤ a, b ≤ n) — the total number of teams, and the ids of the teams that Arkady is interested in.  It is guaranteed that n is such that in each round an even number of team advance, and that a and b are not equal.

In the only line print "Final!" (without quotes), if teams a and b can meet in the Final. Otherwise, print a single integer — the number of the round in which teams a and b can meet. The round are enumerated from 1.

NoteIn the first example teams 1 and 2 meet in the first round.In the second example teams 2 and 6 can only meet in the third round, which is the Final, if they win all their opponents in earlier rounds.In the third example the teams with ids 7 and 5 can meet in the second round, if they win their opponents in the first round.

#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--;
  }
}

#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 <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 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 <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 <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<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;
}

#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 <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>
#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>
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;
}

//#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>
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;
}

//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() {
  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;
}

//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()
{
    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 <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<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;
}

#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<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 <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;
}

#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<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>
#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 <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>
#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 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>
#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<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 <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 <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;
}

#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>
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;
}

#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;

#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 <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>
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;
}

#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;
}

#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;
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 <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<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>
#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;
}

//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 <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<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>
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<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;
#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;
}

#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;
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 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<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 "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;
}

#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>
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<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<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<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 <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>

#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;

#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>

#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;
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;
}

#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 "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;
}

/**---------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
*/

#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>
#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;
}

#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<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;

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 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 <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 <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 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 <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 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<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>

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<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<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 <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>
#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 <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;
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<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 <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,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<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>
#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;
}

//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 <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;
}

/*
                                                             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..... */

#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;
}