#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <climits>
#include <vector>
#include <map>
#include <set>
#include <list>
#include <stack>
#include <queue>
#include <algorithm>
#include <iostream>
#include <string>

#define REP(i,n) for(int i=0;i<n;++i)
#define REPR(i,n) for(int i=n;i>=0;--i)
#define REPI(itr,v) for(auto itr=v.begin();itr!=v.end();++itr)
#define REPIR(itr,v) for(auto itr=v.rbegin();itr!=v.rend();++itr)
#define FOR(i,a,b) for(int i=a;i<b;++i)
#define SORT(v,n) sort(v, v+n)
#define SORTV(v) sort(v.begin(), v.end())
#define ALL(v) v.begin(),v.end()
#define llong long long
#define INF 999999999
#define SUR 1000000007
#define pb push_back
#define pf push_front
#define MP make_pair

int dx[] = {0, 0, -1, 1};
int dy[] = {1, -1, 0, 0};

using namespace std;

typedef pair<int,int> pii;

map<string, int> mp;
char botton[][3] = {{'A', 'B', 'C'}, {'D', 'E', 'F'}, {'G', 'H', 'I'}};

int main(){

  
  string s;
  REP(i,1000){
    cin >> s;
    int len = s.length();
    bool ok = false;
    if(len == 1){
      cout << s << "\n";
      continue;
    }
    REP(j,len-1){
      bool make = false;
      int x, y;
      REP(ii,3){
        REP(jj,3){
          if(botton[ii][jj] == s[j]){
            x = jj; y = ii;
            make = true;
            break;
          }
        }
        if(make){
          make = false;
          break;
        }
      }

      REP(k,4){
        int xx = x + dx[k], yy = y + dy[k];
        if(xx >= 0 && xx < 3 && yy >= 0 && yy < 3){
          if(s[j+1] == botton[yy][xx]){
            make = true;
            break;
          }
        }
      }
      if(!make){
        break;
      }
      if(make && j == len - 2){
       ok = true;
      }
    }
    if(ok){
      cout << s << "\n";
    }
  }

  return 0;
}


