#include <bits/stdc++.h>   using namespace std;   template <typename T>   void display(T a[], int size) {     for (int i = 0; i < size; i++) {       cout << a[i] <<    ;     }     cout << endl;   }   void display(vector<pair<int, int> > a) {     for (int i = 0; i < a.size(); i++) {       cout <<  (  << a[i].first <<  ,  << a[i].second <<  )             <<    ;     }     cout << endl;   }   void display(const vector<int>& a) {     for (int i = 0; i < a.size(); i++) {       cout << a[i];       if (i == a.size() - 1)         cout << endl;       else         cout <<    ;     }   }   template <typename T>   void initialise(T a[], T value, int length) {     for (int i = 0; i < length; i++) a[i] = value;   }   template <typename T>   void initialise(vector<T>& a, T value) {     for (int i = 0; i < a.size(); i++) a[i] = value;   }   bool compare(pair<int, int> a, pair<int, int> b) {     if (a.first != b.first)       return a.first < b.first;     else       return a.second < b.second;   }   int max(int a[], int n) {     int max = -1000000000;     for (int i = 0; i < n; i++) {       if (a[i] > max) max = a[i];     }     return max;   }   bool find(string a[], string s, int n) {     int left = 0;     int right = n - 1;     while (left < right) {       int mid = (left + right) / 2;       if (s.compare(a[mid]) == 0)         return true;       else if (s.compare(a[mid]) < 0) {         right = mid;       } else {         left = mid + 1;       }     }     return false;   }   void factor(int a[], int base, int num, int n) {     for (int i = n - 1; i >= 0; i--) {       a[i] = num % base;       num = num / base;     }   }   int findLength(int n, int base) {     int i = 0;     while (n > 0) {       i++;       n = n / base;     }     return i;   }   int gcd(int a, int b) {     while (a % b != 0 && b % a != 0) {       if (b > a) {         b = b % a;       } else if (a > b) {         a = a % b;       }     }     if (a <= b)       return a;     else       return b;   }   int main() {     int n;     cin >> n;     int dir[n];     int step[n];     for (int i = 0; i < n; i++) {       char now;       cin >> now;       if (now ==  > )         dir[i] = 1;       else         dir[i] = -1;     }     for (int i = 0; i < n; i++) {       cin >> step[i];     }     int trace[n];     initialise(trace, 0, n);     int curr = 0;     while (true) {       if (trace[curr] == 1) {         cout <<  INFINITE  << endl;         break;       } else {         trace[curr] = 1;         curr = curr + dir[curr] * step[curr];         if (curr >= n || curr < 0) {           cout <<  FINITE  << endl;           break;         }       }     }     return 0;   }   