#include <algorithm>
#include <iostream>
#include <memory>
struct Node {
    int value;
    std::unique_ptr<Node> left;
    std::unique_ptr<Node> right;
    explicit Node(int v) : value(v) {}
};
int count(const Node* node) { return node ? 1 + count(node->left.get()) + count(node->right.get()) : 0; }
int height(const Node* node) {
    return node ? 1 + std::max(height(node->left.get()), height(node->right.get())) : 0;
}
int main() {
    auto root = std::make_unique<Node>(1);
    root->left = std::make_unique<Node>(2);
    root->right = std::make_unique<Node>(3);
    if (count(nullptr) != 0 || height(nullptr) != 0) return 1;
    std::cout << "count=" << count(root.get()) << " height=" << height(root.get()) << '\n';
}
