#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;
}