#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
char s1[MAXN], s2[MAXN], t1[MAXN], t2[MAXN];
int fail[MAXN];
void getfail(char t[], int fail[]) {
  fail[0] = fail[1] = 0;
  int l = strlen(t);
  for (int i = 1; i < l; ++i) {
    int j = fail[i];
    while (j && t[i] != t[j]) j = fail[j];
    fail[i + 1] = t[j] == t[i] ? j + 1 : 0;
  }
}
int MP(char s[], char t[], int fail[]) {
  int j = 0;
  int l1 = strlen(s);
  int l2 = strlen(t);
  for (int i = 0; i < l1; ++i) {
    while (j && s[i] != t[j]) j = fail[j];
    if (s[i] == t[j]) ++j;
    if (j == l2) return i;
  }
  return -1;
}
bool flag1, flag2;
int main() {
  scanf("%s%s%s", s1, t1, t2);
  int l = strlen(s1);
  for (int i = 0; i < l; ++i) {
    s2[i] = s1[l - i - 1];
  }
  getfail(t1, fail);
  int temp = MP(s1, t1, fail);
  if (temp != -1) {
    getfail(t2, fail);
    if (MP(s1 + temp + 1, t2, fail) != -1) {
      flag1 = true;
    }
  }
  getfail(t1, fail);
  temp = MP(s2, t1, fail);
  if (temp != -1) {
    getfail(t2, fail);
    if (MP(s2 + temp + 1, t2, fail) != -1) {
      flag2 = true;
    }
  }
  if (flag1 && flag2) {
    printf("both\n");
    return 0;
  }
  if (flag1) {
    printf("forward\n");
    return 0;
  }
  if (flag2) {
    printf("backward\n");
    return 0;
  }
  printf("fantasy\n");
  return 0;
}
