#include <bits/stdc++.h>
using namespace std;
int gcd(int x, int y) { return y == 0 ? x : gcd(y, x % y); }
int toInt(char xx) { return xx - '0'; }
char toChar(int xx) { return xx + '0'; }
bool isNum(char xx) { return ('0' <= xx && xx <= '9'); }
string s;
vector<int> DotPos;
vector<string> vs;
string result;
const int maxn = 4 * 100000 + 5;
bool brk[maxn];
void read() { cin >> s; }
int divLen(int len) {
  int ret = 0;
  if (len <= 11 & len >= 2) {
    if (len - 1 <= 8)
      ret = 1;
    else if (len - 2 <= 8)
      ret = 2;
    else
      ret = 3;
  }
  return ret;
}
void init() {
  string tmp = "";
  for (int i = 0; i < (int)s.size(); ++i) {
    if (s[i] == '.') {
      DotPos.push_back(i);
      vs.push_back(tmp);
      tmp = "";
    } else {
      tmp += s[i];
    }
  }
}
void solve() {
  if ((int)DotPos.size() == 0) {
    cout << "NO";
    return;
  }
  if (s[(int)s.size() - 1] == '.' || s[0] == '.' || DotPos[0] > 8 ||
      (int)s.size() - DotPos[(int)DotPos.size() - 1] - 1 > 3) {
    cout << "NO";
    return;
  }
  for (int i = 1; i < (int)DotPos.size(); ++i) {
    int len = DotPos[i] - DotPos[i - 1] - 1;
    int ret = divLen(len);
    if (ret == 0) {
      cout << "NO";
      return;
    }
    brk[DotPos[i - 1] + ret] = true;
  }
  cout << "YES" << endl;
  for (int i = 0; i < (int)s.size(); ++i) {
    if (!brk[i]) {
      cout << s[i];
    } else {
      cout << s[i] << endl;
    }
  }
}
int main() {
  read();
  init();
  solve();
}
