use super::super::super::cause::*;
pub trait ProblemImplementation {
fn depth(&self) -> usize;
fn get(&self, depth: usize) -> Option<&Cause>;
fn get_mut(&mut self, depth: usize) -> Option<&mut Cause>;
fn top(&self) -> Option<&Cause>;
fn top_mut(&mut self) -> Option<&mut Cause>;
fn root(&self) -> Option<&Cause>;
fn root_mut(&mut self) -> Option<&mut Cause>;
fn add_top(&mut self, cause: Cause);
fn under(self, other: Self) -> Self;
fn above(self, other: Self) -> Self;
}