// Original C++ solution (slower):
#include <bits/stdc++.h>

using namespace std;



   typedef long long ll;

   typedef pair<ll, ll> Pii;

   typedef vector<ll> Vi;

   typedef vector<Vi> VVi;



   const double EPS = (1e-7);

   const ll INF =(1e13);

   const double PI = (acos(-1));

   const ll MOD = ll(1e9) + 7;



   #define REP(i, n) for(ll i = 0; i < (ll)(n); i++)

   #define REPR(i, n) for(ll i = n; i > -1; i--)

   #define FOR(i, a, b) for (ll i = (ll)(a); i < (ll)(b); i++)

   #define ALL(x) (x).begin(),(x).end()

   #define SORT(x) sort((x).begin(), (x).end())

   #define RSORT(x) sort((x).rbegin(), (x).rend())

   #define REVERSE(x) reverse((x).begin(), (x).end())

   #define SZ(x) ((ll)(x).size())

   #define pb push_back

   #define mp make_pair



   //chmax(a, b): a>bならaをbで更新　更新したときにtrueを返す

   //chmin(a, b): a<bならaをbで更新　更新したときにtrueを返す

   template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }

   template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }



   #define dump(x) cerr<< #x << "= " << (x) << endl;



   ll gcd(ll a, ll b){return b?gcd(b,a%b):a;}

   ll pow(ll a, ll b){if (b == 0) return 1; else if (b % 2 == 0) return pow(a * a, b / 2); else return pow(a * a, b / 2) * a;}

   ll pow(ll a, ll b, ll m){if (b == 0) return 1; else if (b % 2 == 0) return (pow(a * a, b / 2, m) % m); else return (pow(a * a, b / 2) * a) % m;}

   ll residue(ll a, ll m){return ((a % m) + m) % m;};



   ll dx[4]={1,0,-1,0};

   ll dy[4]={0,1,0,-1};



const string A = "AKIHABARA";

string S;



bool solve(string s){

   if (s == A) return true;

   if(s.size() > A.size()) return false;

   else{

      bool ans = false;

      REP(i, s.size() + 1){

         string t = s;

         t.insert(t.begin() + i, 'A');

         ans = ans || solve(t);

      }

      return ans;

   }

}

int main(){

   cin >> S;

   cout << (solve(S) ? "YES" : "NO" )<< endl;



}


// Optimized solution to the same problem (faster):
#include <bits/stdc++.h>

using namespace std;



   typedef long long ll;

   typedef pair<ll, ll> Pii;

   typedef vector<ll> Vi;

   typedef vector<Vi> VVi;



   const double EPS = (1e-7);

   const ll INF =(1e13);

   const double PI = (acos(-1));

   const ll MOD = ll(1e9) + 7;



   #define REP(i, n) for(ll i = 0; i < (ll)(n); i++)

   #define REPR(i, n) for(ll i = n; i > -1; i--)

   #define FOR(i, a, b) for (ll i = (ll)(a); i < (ll)(b); i++)

   #define ALL(x) (x).begin(),(x).end()

   #define SORT(x) sort((x).begin(), (x).end())

   #define RSORT(x) sort((x).rbegin(), (x).rend())

   #define REVERSE(x) reverse((x).begin(), (x).end())

   #define SZ(x) ((ll)(x).size())

   #define pb push_back

   #define mp make_pair



   //chmax(a, b): a>bならaをbで更新　更新したときにtrueを返す

   //chmin(a, b): a<bならaをbで更新　更新したときにtrueを返す

   template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }

   template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }



   #define dump(x) cerr<< #x << "= " << (x) << endl;



   ll gcd(ll a, ll b){return b?gcd(b,a%b):a;}

   ll pow(ll a, ll b){if (b == 0) return 1; else if (b % 2 == 0) return pow(a * a, b / 2); else return pow(a * a, b / 2) * a;}

   ll pow(ll a, ll b, ll m){if (b == 0) return 1; else if (b % 2 == 0) return (pow(a * a, b / 2, m) % m); else return (pow(a * a, b / 2) * a) % m;}

   ll residue(ll a, ll m){return ((a % m) + m) % m;};



   ll dx[4]={1,0,-1,0};

   ll dy[4]={0,1,0,-1};



const string A = "AKIHABARA";

string S;



int main(){

   cin >> S;

   string B = "KIHBR";

   set<string> s = {

      "KIHBR", "AKIHBR", "KIHABR", "AKIHABR", "KIHBAR", "AKIHBAR", "KIHABAR", "AKIHABAR",

      "KIHBRA", "AKIHBRA", "KIHABRA", "AKIHABRA", "KIHBARA", "AKIHBARA", "KIHABARA", "AKIHABARA"

   };

   auto e = s.find(S);

   cout << ((e != s.end()) ? "YES" : "NO") << endl;

}


// Fastest known solution for this problem: