#include<iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) :val(x), left(nullptr), right(nullptr) { }
};
TreeNode* insertTree(TreeNode* root, int val) {
if (!root) return new TreeNode(val); // 如果树为空,创建新的节点
if (val < root->val)
root->left = insertTree(root->left, val); // 插入到左子树
else
root->right = insertTree(root->right, val); // 插入到右子树
return root;
}
int depthTree(TreeNode* root) {
if (!root) return 0;
return max(depthTree(root->left), depthTree(root->right)) + 1;
}
int main() {
TreeNode* root = nullptr;
int val;
while (cin >> val) {
root = insertTree(root, val);
if (cin.get() == '\n') break;
}
cout << depthTree(root) << endl;
return 0;
}