#include using namespace std; #define rep(i,a,b) for(int i=(a);i<(b);++i) #define all(n) (n).begin(),(n).end() // カントールの標準形に直す struct tree{ vectorv; tree(){ } tree operator+(const tree& b)const{ tree res; for(auto c:v){ if(!b.v.empty()&&c=2&&res.v[res.v.size()-2]==res.v[res.v.size()-1]){ // res.v.erase(res.v.end()-2); // } // reverse(res.v.begin(),res.v.end()); // res.v[0]=move(res.v[0])+one; // return res; // } tree exp(){ tree res=tree(); res.v.emplace_back(*this); return res; } // omega^a を左からかける tree mul_omega(const tree& a)const{ tree res=*this; for(auto& c:res.v){ c=a+move(c); } return res; } void print(string s=""){ for(auto e:v){ cerr<>s>>t; s="(|"+s+")"; t="(|"+t+")"; auto ts=string_to_tree(s); auto tt=string_to_tree(t); // ts.print(); // tt.print(); cout<<(tt