#include <cctype>
#include <iostream>
#include<vector>
using namespace std;

int main() {
    string s;
    vector<string>vec;
    int count, j = 0;
    while (cin >> s) { // 注意 while 处理多个 case
        for (int i = 0; i < s.size(); i++) {
            //如果输入的符号既不是数字也不是.
            if (!isdigit(s[i]) && s[i] != '.') {
                cout << "NO";
                return 0;
            }
            //添加ip的每部分到数组中
            if (s[i] == '.' && i > j) {
                vec.push_back(s.substr(j, i - j));
                j = i + 1;
                count++;
            }
        }
        //添加ip的最后一部分到数组中
        if (j <= s.size() - 1) {
            vec.push_back(s.substr(j));
        }
        //如果数组长度不是4
        if (vec.size() != 4) {
            cout << "NO";
            return 0;
        }
        //如果数组的某一位不在ip合法数字范围内
        for (auto i : vec) {
            if ((stoi(i) < 0 || stoi(i) > 255) || (i.size() > 1 && i[0] == '0')) {
                cout << "NO";
                return 0;
            }
        }
        cout << "YES";
    }
}
// 64 位输出请用 printf("%lld")

笨方法