use std::ops::Deref;
use std::rc::Rc;
#[derive(Debug, PartialEq, Clone)]
pub struct P<T>(Rc<T>);
impl<T> P<T> {
#[allow(non_snake_case)]
pub fn P(value: T) -> P<T> {
P(Rc::new(value))
}
}
impl<T> Deref for P<T> {
type Target = T;
fn deref(&self) -> &T {
&self.0
}
}