Even in the simple example above it is tricky to work out all the probabilities and the revised probabilities once evidence is entered. Imagine a larger net with many dependencies and nodes that can take on more than two values. Doing the propagation in such cases is generally very difficult. In fact, there are no universally efficient algorithms for doing these computations (the problem is NP-hard). This observation, until relatively recently, meant that BBNs could not be used to solve realistic problems. However, in the 1980s researchers discovered propagation algorithms that were effective for large classes of BBNs. With the introduction of software tools that implement these algorithms (as well as providing a graphical interface to draw the graphs and fill in the probability tables) it is now possible to use BBNs to solve complex problems without doing any of the Bayesian calculations by hand. This is the reason why the popularity of BBNs has mushroomed in recent years. They have already proven useful in practical applications including medical diagnosis, diagnosis of mechanical failures, and adaptive human interfaces for computer software.