func_code_string: #include <bits/stdc++.h>   using namespace std;   #pragma optimize( -O3 )   string to_string(string s) { return     + s +    ; }   string to_string(const char* s) { return to_string((string)s); }   string to_string(const bool& b) { return (b ?  true  :  false ); }   template <typename A, typename B>   string to_string(pair<A, B> p) {     return  (  + to_string(p.first) +  ,   + to_string(p.second) +  ) ;   }   template <typename A>   string to_string(const A& v) {     bool first = true;     string res =  { ;     for (const auto& x : v) {       if (!first) res +=  ,  ;       first = false;       res += to_string(x);     }     res +=  } ;     return res;   }   void debug_out() { cerr << endl; }   template <typename Head, typename... Tail>   void debug_out(Head H, Tail... T) {     cerr <<     << to_string(H);     debug_out(T...);   }   template <typename T>   inline void _read(T& x) {     cin >> x;   }   template <typename A, typename B>   inline void _read(pair<A, B>& x) {     _read(x.first);     _read(x.second);   }   template <typename T>   inline void _read(vector<T>& x) {     for (auto& v : x) _read(v);   }   void R() {}   template <typename T, typename... U>   void R(T& head, U&... tail) {     _read(head);     R(tail...);   }   template <typename T>   inline void _write(const T& x) {     cout << x <<    ;   }   template <typename A, typename B>   inline void _write(const pair<A, B>& x) {     _write(x.first);     _write(x.second);   }   template <typename T>   inline void _write(const vector<T>& in) {     for (const auto& x : in) _write(x);   }   void W() { cout <<   n ; }   template <typename T, typename... U>   void W(const T& head, const U&... tail) {     _write(head);     W(tail...);   }   void go();   int main() {     ios::sync_with_stdio(false);     cin.tie(nullptr);     cout.tie(nullptr);     go();     return 0;   }   int solve(int a, int b) {     if (a == 1 && b == 2) return 3;     if (a == 1 && b == 3) return 4;     if (a == 2 && b == 1) return 3;     if (a == 2 && b == 3) {       W( Infinite );       exit(0);     }     if (a == 3 && b == 1) return 4;     if (a == 3 && b == 2) {       W( Infinite );       exit(0);     }   }   void go() {     int n;     R(n);     vector<int> a(n);     R(a);     int ans = 0;     for (int i = 1; i < n; i++) {       ans += solve(a[i - 1], a[i]);     }     for (int i = 2; i < n; i++)       if (a[i - 2] == 3 && a[i - 1] == 1 && a[i] == 2) ans--;     W( Finite );     W(ans);   }   