#include <algorithm>
#include <deque>
#include <iostream>
#include <map>
#include <set>
#include <stack>
#include <vector>
using namespace std;
typedef long long ll;

int main() {
  string S;
  cin >> S;
  bool hflag = false, iflag = false;
  string ans = "Yes";
  for (int i = 0; i < S.length(); i++) {
    if (S[i] == 'h') {
      if ((i < S.length() - 1) && S[i + 1] == 'i') {
        i++;
        continue;
      } else {
        ans = "No";
        break;
      }
    } else {
      ans = "No";
      break;
    }
  }
  cout << ans << endl;
  return 0;
}
#include <bits/stdc++.h>//復習必須
#include<iostream>
#include<vector>
#include <cmath>
#include <map>
#include <algorithm>
#include <string>
#define rep(i, n) for (int i = 0; i < n; ++i)
using ll = long long;
using namespace std;
#define P pair<int, int>
int main () {
   string s ;
   cin >> s ;
   size_t n = s.length() ;
   bool flag = true ;
   if(n % 2 != 0 ){
       cout << "No" << endl;
       return 0 ;
   }else{
       
       rep(i , n /2){
           if(s[2*i] != 'h' || s[2*i + 1] != 'i'){
               flag = false ;

           }
       }
   }
   if(flag == true){
       cout << "Yes" << endl;
   }else{
       cout << "No" << endl;
   }
    return 0 ;
}

 
