diff --git a/ABO.py b/ABO.py new file mode 100644 index 0000000..1b2d6de --- /dev/null +++ b/ABO.py @@ -0,0 +1,28 @@ +import numpy as np +import matplotlib.pylab as plt + +pA,pB,pO=1.0/3,1.0/3,1.0/3 +nA,nB,nAB,nO=25,25,50,15 + +N=nA+nB+nAB+nO + +print pA, pB,pO + +for i in range(20): + + EAA=pA**2*nA/(pA**2+2*pA*pO) + EAO=2*pA*pO*nA/(pA**2+2*pA*pO) + EBB=pB**2*nB/(pB**2+2*pB*pO) + EBO=2*pB*pO*nB/(pB**2+2*pB*pO) + EAB=nAB + EOO=nO + + pA=(2*EAA+EAO+EAB)/(2*N) + pB=(2*EBB+EBO+EAB)/(2*N) + pO=(2*EOO+EAO+EBO)/(2*N) + + like=nA*np.log(pA**2+2*pA*pO)+nB*np.log(pB**2+2*pB*pO)+nAB*np.log(2*pA*pB)+nO*np.log(pO**2) + + print pA, pB,pO,like + +print EAA,EAO,EAB,EBB,EBO,EOO diff --git a/EM.py b/EM.py new file mode 100644 index 0000000..36a593b --- /dev/null +++ b/EM.py @@ -0,0 +1,58 @@ +import operator +import numpy as np +import numpy.random as rm +lsave=0 +#theta=[pi,L11-L14,L21-L24,R11-R14,R21-R24] +A={} +for xx in range(500): + u=np.array([[4,2,2,2],[2,4,2,2],[2,2,4,2],[2,2,2,4]]) + L1=rm.random_sample(4) + L2=rm.random_sample(4) + R1=rm.random_sample(4) + R2=rm.random_sample(4) + L1=L1/sum(L1) + L2=L1/sum(L2) + R1=R1/sum(R1) + R2=R2/sum(R2) + pi=rm.random_sample(1)[0] + N=sum(u.reshape(16,1))[0] + + while True: + FL=np.array([[pi*L1[i]*L2[j] for i in range(4)] for j in range(4)]) + FR=np.array([[(1-pi)*R1[i]*R2[j] for i in range(4)] for j in range(4)]) + F=FL+FR + lobs=sum((u*np.log(F)).reshape(16,1))[0] + uL=u*FL/F + NL=sum(uL.reshape(16,1))[0] + uR=u*FR/F + NR=sum(uR.reshape(16,1))[0] + + pistar=sum(uL.reshape(16,1))[0]/N + L1star=sum(uL.T)/NL + L2star=sum(uL)/NL + R1star=sum(uR.T)/NR + R2star=sum(uR)/NR + + if np.abs(lobs-lsave)<.000001: + A[lobs]=F + break + + R1=R1star + R2=R2star + L2=L2star + L1=L1star + pi=pistar + lsave=lobs + +print 40*A[sorted(A.iterkeys(),reverse=True)[0]] + + + + + + + + + + + diff --git a/EMBOSSwater.py b/EMBOSSwater.py new file mode 100644 index 0000000..da1b7ba --- /dev/null +++ b/EMBOSSwater.py @@ -0,0 +1,63 @@ +import urllib +import urllib2 +from fasta import readFASTA +from collections import OrderedDict + +url = 'http://www.ebi.ac.uk/Tools/services/rest/emboss_water/' +s=readFASTA("rosalind_laff.txt") +param_dict={ + 'email':'jeremy.teitelbaum@uconn.edu', + 'title':'Local Alignment', + 'matrix': 'EBLOSUM62', + 'format':'markx3', + 'gapopen':15, + 'gapext':1, +} +param_dict['asequence']=s.values()[0] +param_dict['sid1']='A' +param_dict['bsequence']=s.values()[1] +param_dict['sid2']='B' +params = urllib.urlencode(param_dict) + +response = urllib2.urlopen(url+'run/', params).read() +while urllib2.urlopen(url+'status/'+response).read()!="FINISHED": + continue + +answer=urllib2.urlopen(url+'resulttypes/'+response).read() + +final=urllib2.urlopen(url+'result/'+response+'/out').read() +ls= [x for x in final.split('\n') if len(x)>0] +value,key="","" +s=OrderedDict({}) +j=0 +for x in ls: + if x[0] in ['#',';']: + #print x + continue + + if x[0]==">": + + if key!="": + s[key]=value + key=x[1:].split()[0]+'-'+str(j) + + j=j+1 + value="" + else: + value=value+x.strip() + + s[key]=value + +R='' +for x in s.values()[0]: + if x!='-': + R+=x +S='' +for x in s.values()[1]: + if x!='-': + S+=x +print R +print +print S +#print +#print s.values()[1] \ No newline at end of file diff --git a/Experiments.py b/Experiments.py new file mode 100644 index 0000000..68da5a5 --- /dev/null +++ b/Experiments.py @@ -0,0 +1,61 @@ + +import numpy as np +from pymc import * +import matplotlib.pyplot as plt +from matplotlib.pyplot import scatter,show +H,R=4,0 +x=DiscreteUniform('X',lower=1,upper=4,size=4) + + +@potential +def L(H=4,R=0,x=x): + p=0 + for i in range(1,4): + if x[i]==x[0]: + p+=H + else: + p+=R + return p + +fig,axes=plt.subplots(nrows=2,ncols=1) + +N,t=5000,1 +model=MCMC([x,L]) +model.sample(N,thin=t) +print '!' +#u=x.trace()[:,0]+np.random.normal(0,0.1,N/t) +#v=x.trace()[:,1]+np.random.normal(0,0.1,N/t) +#scatter(u,v) +#show() +z=model.trace('X')[:] +s=0.0 +print +for n in z: + if n[0]==n[1]: + s+=1 +print s/len(z) +print np.exp(H)/(np.exp(H)+3*np.exp(R)) +u=z[:,0]+np.random.normal(0,.1,len(z[:,0])) +v=z[:,1]+np.random.normal(0,.1,len(z[:,1])) +axes[0].scatter(u,v) +Hval,Rval=5,1 +model.sample(N,thin=t) + +z=model.trace('X')[:] +u=z[:,0]+np.random.normal(0,.1,len(z[:,0])) +v=z[:,1]+np.random.normal(0,.1,len(z[:,1])) +axes[1].scatter(u,v) + +show() + + + +#import pydot +#graph=pydot.Dot(graph_type='graph') +#graph.set_graphviz_executables({'dot':'C:\\Program Files (x86)\Graphviz2.38\\bin\dot.exe'}) + +#import scipy.misc +#pymc.graph.graph(model,path='Desktop',name='my_graph',format='png',prog='C:\Program Files (x86)\Graphviz2.38\\bin\dot.exe') +#plt.figure(figsize=(8,8)) +#plt.imshow(scipy.misc.imread('my_graph.png')) +#plt.close() \ No newline at end of file diff --git a/LewisHW3Distances.py b/LewisHW3Distances.py new file mode 100644 index 0000000..1fa5bf9 --- /dev/null +++ b/LewisHW3Distances.py @@ -0,0 +1,9 @@ +import numpy + +differences=[471,568,520,534,501,499] +n=2205 +pdistances=[differences[i]/n for i in range(6)] +jcdistances=[-3/4*log(1-4/3*pdistances[i]) for i in range(6)] + +print pdistances +print jcdistances diff --git a/LocalAlignment.py b/LocalAlignment.py new file mode 100644 index 0000000..67b5d18 --- /dev/null +++ b/LocalAlignment.py @@ -0,0 +1,149 @@ +import numpy as np +from scores import * +from fasta import readFASTA +# this is an implementation of the smith-waterman algorithm + + +class LocalAlignment: + def __init__(self,A,B,match_score=None,gap=None): + if match_score is None: + def match_score(A,B): + if A!=B: + return 1 + else: + return -1 + self.match_score=match_score + if gap is None: + def gap(x): + return x + self.gap=gap + + self.Rx=None + self.Sx=None + self.tb=False + self.A=A + self.B=B + self.nA=len(self.A)+1 + self.nB=len(self.B)+1 + self.dpV=np.zeros((self.nB,self.nA),dtype=int) + self.dpG=np.zeros((self.nB,self.nA),dtype=int) + self.dpE=np.zeros((self.nB,self.nA),dtype=int) + self.dpF=np.zeros((self.nB,self.nA),dtype=int) + for i in range(1,self.nA): + #print i + for j in range(1,self.nB): + if (i,j)==(1,1): + self.dpG[j][i]=self.match_score(B[0],A[0]) + self.dpE[j][i]=0 + self.dpF[j][i]=0 + if i==1 and j>1: + self.dpG[j][i]=self.match_score(B[j-1],A[0]) + self.dpE[j][i]=min(self.dpE[j-1][i]+self.gap(j)-self.gap(j-1),self.dpV[j-1][i]+self.gap(1)) + self.dpF[j][i]=self.gap(j)+gap(1) + if i>1 and j==1: + self.dpG[j][i]=self.match_score(B[0],A[i-1]) + self.dpE[j][i]=self.gap(i)+gap(1) + self.dpF[j][i]=min(self.dpF[j][i-1]+self.gap(i)-self.gap(i-1),self.dpV[j][i-1]+self.gap(1)) + if i>1 and j>1: + self.dpG[j][i]=self.dpV[j-1][i-1]+self.match_score(B[j-1],A[i-1]) + self.dpE[j][i]=min(self.dpE[j-1][i]+self.gap(j)-self.gap(j-1),self.dpV[j-1][i]+self.gap(1)) + self.dpF[j][i]=min(self.dpF[j][i-1]+self.gap(i)-self.gap(i-1),self.dpV[j][i-1]+self.gap(1)) + + self.dpV[j][i]=min(0,self.dpE[j][i],self.dpF[j][i],self.dpG[j][i]) + + if (i,j)==(1,1): + self.minV=self.dpV[j][i] + self.mini=i + self.minj=j + else: + if self.dpV[j][i]=1 and j>=1 and self.dpV[j][i]<0: + if s==2: + R.append(self.A[i-1]) + S.append(self.B[j-1]) + #print '**',i,j,s,self.dpE[j][i],self.dpF[j][i],self.dpG[j][i],''.join(reversed(R)),''.join(reversed(S)) + i=i-1 + j=j-1 + elif s==0: + R.append('-') + S.append(self.B[j-1]) + #print '**',i,j,s,self.dpE[j][i],self.dpF[j][i],self.dpG[j][i],''.join(reversed(R)),''.join(reversed(S)) + j=j-1 + while self.dpV[j][i]<0 and j>=1 and self.dpE[j][i]+self.gap(j)-self.gap(j-1)=1 and self.dpF[j][i]+self.gap(i)-self.gap(i-1)0 and self.dpV[j][i]<0: + #R.append('-') + S.append(self.B[j-1]) + j=j-1 + + elif j==0: + while i>0 and self.dpV[j][i]<0: + #S.append('-') + R.append(self.A[i-1]) + i=i-1 + + self.Rx= ''.join(reversed(R)) + self.Sx=''.join(reversed(S)) + self.tb=True + return(self.Rx,self.Sx) + + +s=readFASTA("rosalind_loca.txt") + +def pam250_penalty(x,y): + return -pam250_score(x,y) + +def blosum62_penalty(x,y): + return -blosum62_score(x,y) + +def agap(j): + return 5*j + +#print len(s.values()[0]) +#print len(s.values()[1]) +A=s.values()[0] +B=s.values()[1] + +#A='MEANLYPRTEINSTRING' +#B='PLEASANTLYEINSTEIN' + +X=LocalAlignment(A,B,gap=agap,match_score=pam250_penalty) +(R,S)=X.aligned() +print -X.score() +print R.replace('-','') +print S.replace('-','') + + + + diff --git a/MCMC.py b/MCMC.py new file mode 100644 index 0000000..d69a3ef --- /dev/null +++ b/MCMC.py @@ -0,0 +1,62 @@ +import numpy as np +import numpy.random as rd +import matplotlib.pyplot as mp + +plist=[] +threshold=0.8 +LSave=0 +def gstep(v): + stp=rd.normal(0,.01,len(v)) + return(v+stp) + +def L(pi,L1,L2,R1,R2,u): + FL=np.array([[pi*L1[i]*L2[j] for i in range(4)] for j in range(4)]) + FR=np.array([[(1-pi)*R1[i]*R2[j] for i in range(4)] for j in range(4)]) + F=FL+FR + lobs=sum((u*np.log(F)).reshape(16,1))[0] + return(lobs) + +u=np.array([[4,2,2,2],[2,4,2,2],[2,2,4,2],[2,2,2,4]]) +L1=rd.random_sample(4) +L2=rd.random_sample(4) +R1=rd.random_sample(4) +R2=rd.random_sample(4) +L1=L1/sum(L1) +L2=L1/sum(L2) +R1=R1/sum(R1) +R2=R2/sum(R2) +pi=rd.random_sample(1)[0] +N=sum(u.reshape(16,1))[0] + +lsave=L(pi,L1,L2,R1,R2,u) + +for xx in range(10000): + L1new=gstep(L1) + L1new=L1new/sum(L1new) + L2new=gstep(L2) + L2new=L2new/sum(L2new) + R1new=gstep(R1) + R1new=R1new/sum(R1new) + R2new=gstep(R2) + R2new=R2new/sum(R2new) + pnew=pi+rd.normal(0,.01) + while pnew<0 or pnew>1: + pnew=pi+rd.normal(0,.01) + + loglike=L(pnew,L1new,L2new,R1new,R2new,u) + if loglike>lsave or (loglikethreshold): + R1=R1new + L1=L1new + R2=R2new + L2=L2new + pi=pnew + lsave=loglike + plist.append(pi) + LSave+=L1 + else: + plist.append(pi) + LSave+=L1 + +print LSave/10000 +mp.hist(plist) +mp.show() diff --git a/MH.py b/MH.py new file mode 100644 index 0000000..584c22b --- /dev/null +++ b/MH.py @@ -0,0 +1,75 @@ +import numpy as np +import numpy.random as rd +import matplotlib.pylab as plt + +#likelihood function +#proposal density +#Number of samples to draw (number of steps) +#starting point + +#Returns -- +#samples returned +#non-zero steps taken +#acceptance ratio = non-zero steps/samples + + + +def like(x): + try: + z=-x+np.log(x) + except: + z=0 + return(z) + +xs=np.arange(-1,10,.01) +ys=xs*np.exp(-xs) +Nsteps=10000 +x0=0 +accept=0 +n=0 + +answers=np.empty(Nsteps) +accepted_steps=np.empty(Nsteps) +F=plt.figure() +stepsizes=[np.exp(i*np.log(2)) for i in range(-10,10)] +accepted=np.empty(len(stepsizes)) + + +for stepsize in stepsizes: + x=2 + j=0 + for i in range(Nsteps): + step=rd.uniform(-stepsize,stepsize) + x1=x+step + a=like(x1)-like(x) + if a>0: + x=x1 + accept+=1.0 + accepted_steps[j]=step + j+=1 + else: + if np.log(rd.uniform(0.0,1.0))0 or (a<0 and np.log(rd.uniform(0.0,1.0)) self.last_char_index + + def implicit(self): + return self.last_char_index >= self.first_char_index + + +class SuffixTree(object): + """A suffix tree for string matching. Uses Ukkonen's algorithm + for construction. + """ + def __init__(self, string, case_insensitive=False,sep_chars=[]): + """ + string + the string for which to construct a suffix tree + """ + self.string = string + self.sep_chars=sep_chars + self.case_insensitive = case_insensitive + self.N = len(string) - 1 + self.nodes = [Node()] + self.edges = {} + self.alphabet={} + self.active = Suffix(0, 0, -1,0) + if self.case_insensitive: + self.string = self.string.lower() + for i in range(len(string)): + self._add_prefix(i) + self._add_to_alphabet(self.string[i]) + + + + + def __repr__(self): + """ + Lists edges in the suffix tree + """ + s="" + for x in self.alphabet.keys(): + s+=x + curr_index = self.N + s = "\tLabel \tStart \tEnd \tDepth \tSuf \tParent \tFirst \tLast \tString\n" + values = self.edges.values() + values.sort(key=lambda x: (self.nodes[x.dest_node_index].label,self.nodes[x.source_node_index])) + for edge in values: + if edge.source_node_index == -1: + continue + s += "\t%s \t%s \t%s \t%s \t%s \t%s \t%s \t%s \t"%(self.nodes[edge.dest_node_index].label, edge.source_node_index + ,edge.dest_node_index ,self.nodes[edge.dest_node_index].depth + ,self.nodes[edge.dest_node_index].suffix_node, self.nodes[edge.dest_node_index].parent + ,edge.first_char_index + ,edge.last_char_index) + + + top = min(curr_index, edge.last_char_index) + s += self.string[edge.first_char_index:top+1] + "\n" + return s + + def _add_to_alphabet(self,char): + self.alphabet[char]=1 + + def _add_prefix(self, last_char_index): + """The core construction method. + """ + last_parent_node = -1 + + while True: + # the current phase of the algorithm is given by last_char_index + # the current suffix being inserted is given by the path from the root to self.active.source_node_index + # followed by the string from self.active.first_char_index to the last_char_index in self.string + # So it is of the form (A)(string[self.active.first_char_index..self.active.last_char_index])(self.string[last_char_index]) [***] + # and the path (A) ends at the node self.active.source_node_index + + # any splits will occur in an edge from self.active.source_node_index + # we need to remember this node for the purposes of creating suffix links + + + parent_node = self.active.source_node_index + + if self.active.explicit(): + # active is at a node (meaning that the middle piece of the form [***] is missing + if (self.active.source_node_index, self.string[last_char_index]) in self.edges: + # Rule 3 (do nothing): edge leaving source_node_index is marked with the last character of active suffix + # prefix is already in tree + break + else: + # active is in the middle of an edge from source node in the direction of active.first_char_index + e = self.edges[self.active.source_node_index, self.string[self.active.first_char_index]] + if self.string[e.first_char_index + self.active.length + 1] == self.string[last_char_index]: + # Rule 3 (do nothing): suffix lies in middle of an edge + # prefix is already in tree + break + + # Rule 2 in the middle of an edge, we know that at least one path continues, we must split edge + + # Also, this new internal node will have a suffix link to it from "last_parent_node" + # assuming last parent node isn't the root (this happens a bit later) + + parent_node = self._split_edge(e, self.active) + + # either active is at a node, but there is no edge marked with the last character of active suffix + # OR we're in Rule 2, we just split the edge, and parent_node is now the new node + # we add the new leaf node in either case (Rule 2) + + + self.nodes.append(Node(self.active.ext)) + e = Edge(last_char_index, self.N, parent_node, len(self.nodes) - 1) + self.nodes[len(self.nodes)-1].parent=(parent_node,self.string[e.first_char_index]) + self._insert_edge(e) + + # here's where we put in the suffix link to the parent of the newly created node + # from the previous parent + + if last_parent_node > 0: + self.nodes[last_parent_node].suffix_node = parent_node + + # Remember the parent for future suffix links + + last_parent_node = parent_node + + # if the active node is the root, then the next prefix to consider is obtained by just incrementing + # the first_char_index; otherwise, the next prefix to consider is obtained by following a suffix + # link. Suppose the suffix link goes from v to s(v). Write the path to v in the form XA with X a single character and A a string + # then the path to the node s(v) is A. In other words, either way (i.e. from the root or via a suffix link) + # we have moved to the next extension in this phase. + + if self.active.source_node_index == 0: + self.active.ext+=1 + self.active.first_char_index += 1 + else: + self.active.ext+=1 + self.active.source_node_index = self.nodes[self.active.source_node_index].suffix_node + + + # traverse the tree along the active suffix, sucking up edges until the either + # the suffix becomes explicit or the end of the prefix lies in the middle of an edge + # leaving the active node + + self._canonize_suffix(self.active) + + # we get here after a "Rule 3" situation, meaning that all of "suffix" is + # implicitly in the tree. We have to finish up by creating the last suffix link + # and moving down the tree so the end of the suffix lies within an edge leaving + # the active node. + + if last_parent_node > 0: + self.nodes[last_parent_node].suffix_node = parent_node + self.active.last_char_index += 1 + self._canonize_suffix(self.active) + + def _insert_edge(self, edge): + self.edges[(edge.source_node_index, self.string[edge.first_char_index])] = edge + self.nodes[edge.dest_node_index].depth=self.nodes[edge.source_node_index].depth+edge.length+1 + + def _remove_edge(self, edge): + self.edges.pop((edge.source_node_index, self.string[edge.first_char_index])) + + def _split_edge(self, edge, suffix): + self.nodes.append(Node(-1)) + e = Edge(edge.first_char_index, edge.first_char_index + suffix.length, suffix.source_node_index, len(self.nodes) - 1) + self.nodes[len(self.nodes)-1].parent=(suffix.source_node_index,self.string[e.first_char_index]) + self._remove_edge(edge) + self._insert_edge(e) + self.nodes[e.dest_node_index].suffix_node = suffix.source_node_index ### need to add node for each edge + + edge.first_char_index += suffix.length + 1 + self.nodes[edge.dest_node_index].parent=(len(self.nodes)-1,self.string[edge.first_char_index]) + edge.source_node_index = e.dest_node_index + self._insert_edge(edge) + return e.dest_node_index + + def _canonize_suffix(self, suffix): + """This canonizes the suffix, walking along its suffix string until it + is explicit or there are no more matched nodes. + """ + if not suffix.explicit(): + e = self.edges[suffix.source_node_index, self.string[suffix.first_char_index]] + if e.length <= suffix.length: + suffix.first_char_index += e.length + 1 + suffix.source_node_index = e.dest_node_index + self._canonize_suffix(suffix) + + + # Public methods + def find_substring(self, substring,nodelist=[]): + """Returns the index of substring in string or -1 if it + is not found. + """ + if not substring: + return -1 + if self.case_insensitive: + substring = substring.lower() + curr_node = 0 + i = 0 + while i < len(substring): + edge = self.edges.get((curr_node, substring[i])) + if not edge: + return -1 + ln = min(edge.length + 1, len(substring) - i) + if substring[i:i + ln] != self.string[edge.first_char_index:edge.first_char_index + ln]: + return -1 + i += edge.length + 1 + curr_node = edge.dest_node_index + return self.count_leaves_below(curr_node,nodelist) + + + def count_leaves_below(self,node,nodelist): + j=0 ; n=1 + for x in self.alphabet.keys(): + e=self.edges.get((node,x)) + if e: + j+=self.count_leaves_below(e.dest_node_index,nodelist) + n=0 + if n==1: + nodelist.append(self.nodes[node].label) + return max(n,j) + + + def common_substring_nodes(self,curr_node=0,answers=[]): + n=1; l={} + for x in self.alphabet.keys(): + e=self.edges.get((curr_node,x)) + if e: + l.update(self.common_substring_nodes(e.dest_node_index,answers)) + n=0 + if n==1: + for t in self.sep_chars: + if t in self.string[self.nodes[curr_node].label:]: + l[t]=1 + break + if len(l.keys())==len(self.sep_chars): + answers.append(curr_node) + return l + + + def prefix_of_node(self,curr_node): + prefix='' + while True: + n=self.nodes[curr_node].parent + e=self.edges.get(n) + if e: + prefix=self.string[e.first_char_index:e.last_char_index+1]+prefix + curr_node=e.source_node_index + else: + break + return prefix + + def has_substring(self, substring): + return self.find_substring(substring) != -1 + + +s=sys.stdin.read() +#s='banana$andes#ran*' +n=SuffixTree(s,case_insensitive=True,sep_chars=['*','$','#']) +a=[] +n.common_substring_nodes(answers=a) +a.sort(key=lambda x: -(n.nodes[x].depth)) +print n.prefix_of_node(a[0]) + + + diff --git a/SavedSuffixTree.py b/SavedSuffixTree.py new file mode 100755 index 0000000..33479ee --- /dev/null +++ b/SavedSuffixTree.py @@ -0,0 +1,277 @@ +#!/usr/bin/python + +class Node(object): + """A node in the suffix tree. + + suffix_node + the index of a node with a matching suffix, representing a suffix link. + -1 indicates this node has no suffix link. + + depth + depth of the node in the tree + """ + def __init__(self,depth=0): + self.suffix_node = -1 + self.depth=depth + + def __repr__(self): + return "Node(suffix link: %d, depth: %d)"%(self.suffix_node,self.depth) + +class Edge(object): + """An edge in the suffix tree. + + first_char_index + index of start of string part represented by this edge + + last_char_index + index of end of string part represented by this edge + + source_node_index + index of source node of edge + + dest_node_index + index of destination node of edge + """ + def __init__(self, first_char_index, last_char_index, source_node_index, dest_node_index): + self.first_char_index = first_char_index + self.last_char_index = last_char_index + self.source_node_index = source_node_index + self.dest_node_index = dest_node_index + + @property + def length(self): + return self.last_char_index - self.first_char_index + + def __repr__(self): + return 'Edge(%d, %d, %d %d)'% (self.source_node_index, self.dest_node_index + ,self.first_char_index, self.last_char_index ) + + +class Suffix(object): + """Represents a suffix from first_char_index to last_char_index. + + source_node_index + index of node where this suffix starts + + first_char_index + index of start of suffix in string + + last_char_index + index of end of suffix in string + """ + def __init__(self, source_node_index, first_char_index, last_char_index): + self.source_node_index = source_node_index + self.first_char_index = first_char_index + self.last_char_index = last_char_index + + + def __repr__(self): + return 'Suffix(%d, %d, %d)'%(self.source_node_index,self.first_char_index,self.last_char_index) + + @property + def length(self): + return self.last_char_index - self.first_char_index + + def explicit(self): + """A suffix is explicit if it ends on a node. first_char_index + is set greater than last_char_index to indicate this. + """ + return self.first_char_index > self.last_char_index + + def implicit(self): + return self.last_char_index >= self.first_char_index + + +class SuffixTree(object): + """A suffix tree for string matching. Uses Ukkonen's algorithm + for construction. + """ + def __init__(self, string, case_insensitive=False): + """ + string + the string for which to construct a suffix tree + """ + self.string = string + self.case_insensitive = case_insensitive + self.N = len(string) - 1 + self.nodes = [Node()] + self.edges = {} + self.active = Suffix(0, 0, -1) + if self.case_insensitive: + self.string = self.string.lower() + for i in range(len(string)): + self._add_prefix(i) + print self + + def __repr__(self): + """ + Lists edges in the suffix tree + """ + curr_index = self.N + s = "\tDepth \tStart \tEnd \tSuf \tFirst \tLast \tString\n" + values = self.edges.values() + values.sort(key=lambda x: (self.nodes[x.source_node_index].depth,self.nodes[x.source_node_index])) + for edge in values: + if edge.source_node_index == -1: + continue + s += "\t%s \t%s \t%s \t%s \t%s \t%s \t"%(self.nodes[edge.source_node_index].depth, edge.source_node_index + ,edge.dest_node_index + ,self.nodes[edge.dest_node_index].suffix_node + ,edge.first_char_index + ,edge.last_char_index) + + + top = min(curr_index, edge.last_char_index) + s += self.string[edge.first_char_index:top+1] + "\n" + return s + + def _add_prefix(self, last_char_index): + """The core construction method. + """ + last_parent_node = -1 + while True: + # the current phase of the algorithm is given by last_char_index + # the current suffix being inserted is given by the path from the root to self.active.source_node_index + # followed by the string from self.active.first_char_index to the last_char_index in self.string + # So it is of the form (A)(string[self.active.first_char_index..self.active.last_char_index])(self.string[last_char_index]) [***] + # and the path (A) ends at the node self.active.source_node_index + + # any splits will occur in an edge from self.active.source_node_index + # we need to remember this node for the purposes of creating suffix links + + + parent_node = self.active.source_node_index + + if self.active.explicit(): + # active is at a node (meaning that the middle piece of the form [***] is missing + if (self.active.source_node_index, self.string[last_char_index]) in self.edges: + # Rule 3 (do nothing): edge leaving source_node_index is marked with the last character of active suffix + # prefix is already in tree + break + else: + # active is in the middle of an edge from source node in the direction of active.first_char_index + e = self.edges[self.active.source_node_index, self.string[self.active.first_char_index]] + if self.string[e.first_char_index + self.active.length + 1] == self.string[last_char_index]: + # Rule 3 (do nothing): suffix lies in middle of an edge + # prefix is already in tree + break + + # Rule 2 in the middle of an edge, we know that at least one path continues, we must split edge + + # Also, this new internal node will have a suffix link to it from "last_parent_node" + # assuming last parent node isn't the root (this happens a bit later) + + parent_node = self._split_edge(e, self.active) + + # either active is at a node, but there is no edge marked with the last character of active suffix + # OR we're in Rule 2, we just split the edge, and parent_node is now the new node + # we add the new leaf node in either case (Rule 2) + + + self.nodes.append(Node(self.nodes[parent_node].depth+1)) + e = Edge(last_char_index, self.N, parent_node, len(self.nodes) - 1) + self._insert_edge(e) + + # here's where we put in the suffix link to the parent of the newly created node + # from the previous parent + + if last_parent_node > 0: + self.nodes[last_parent_node].suffix_node = parent_node + + # Remember the parent for future suffix links + + last_parent_node = parent_node + + # if the active node is the root, then the next prefix to consider is obtained by just incrementing + # the first_char_index; otherwise, the next prefix to consider is obtained by following a suffix + # link. Suppose the suffix link goes from v to s(v). Write the path to v in the form XA with X a single character and A a string + # then the path to the node s(v) is A. In other words, either way (i.e. from the root or via a suffix link) + # we have moved to the next extension in this phase. + + if self.active.source_node_index == 0: + self.active.first_char_index += 1 + else: + self.active.source_node_index = self.nodes[self.active.source_node_index].suffix_node + + + # traverse the tree along the active suffix, sucking up edges until the either + # the suffix becomes explicit or the end of the prefix lies in the middle of an edge + # leaving the active node + + self._canonize_suffix(self.active) + + # we get here after a "Rule 3" situation, meaning that all of "suffix" is + # implicitly in the tree. We have to finish up by creating the last suffix link + # and moving down the tree so the end of the suffix lies within an edge leaving + # the active node. + + if last_parent_node > 0: + self.nodes[last_parent_node].suffix_node = parent_node + self.active.last_char_index += 1 + self._canonize_suffix(self.active) + + def _insert_edge(self, edge): + self.edges[(edge.source_node_index, self.string[edge.first_char_index])] = edge + + def _remove_edge(self, edge): + self.edges.pop((edge.source_node_index, self.string[edge.first_char_index])) + + def _split_edge(self, edge, suffix): + self.nodes.append(Node(self.nodes[suffix.source_node_index].depth+1)) + e = Edge(edge.first_char_index, edge.first_char_index + suffix.length, suffix.source_node_index, len(self.nodes) - 1) + self._remove_edge(edge) + self._insert_edge(e) + self.nodes[e.dest_node_index].suffix_node = suffix.source_node_index ### need to add node for each edge + edge.first_char_index += suffix.length + 1 + edge.source_node_index = e.dest_node_index + self._insert_edge(edge) + return e.dest_node_index + + def _canonize_suffix(self, suffix): + """This canonizes the suffix, walking along its suffix string until it + is explicit or there are no more matched nodes. + """ + if not suffix.explicit(): + e = self.edges[suffix.source_node_index, self.string[suffix.first_char_index]] + if e.length <= suffix.length: + suffix.first_char_index += e.length + 1 + suffix.source_node_index = e.dest_node_index + self._canonize_suffix(suffix) + + + # Public methods + def find_substring(self, substring): + """Returns the index of substring in string or -1 if it + is not found. + """ + if not substring: + return -1 + if self.case_insensitive: + substring = substring.lower() + curr_node = 0 + i = 0 + while i < len(substring): + edge = self.edges.get((curr_node, substring[i])) + if not edge: + return -1 + ln = min(edge.length + 1, len(substring) - i) + if substring[i:i + ln] != self.string[edge.first_char_index:edge.first_char_index + ln]: + return -1 + i += edge.length + 1 + curr_node = edge.dest_node_index + return edge.first_char_index - len(substring) + ln + + + def has_substring(self, substring): + return self.find_substring(substring) != -1 + + + + +t='abcabcabcabc$' +s='ddcd' +n=SuffixTree(t) +print n +print s,"occurs at",n.find_substring(s),"in",t + + diff --git a/SemiGlobalAlignment.py b/SemiGlobalAlignment.py new file mode 100644 index 0000000..489b12b --- /dev/null +++ b/SemiGlobalAlignment.py @@ -0,0 +1,149 @@ +import numpy as np +from scores import * +from fasta import readFASTA +# this is a work in progress to give "semi-global alignments" + + +class LocalAlignment: + def __init__(self,A,B,match_score=None,gap=None): + if match_score is None: + def match_score(A,B): + if A!=B: + return 1 + else: + return -1 + self.match_score=match_score + if gap is None: + def gap(x): + return x + self.gap=gap + + self.Rx=None + self.Sx=None + self.tb=False + self.A=A + self.B=B + self.nA=len(self.A)+1 + self.nB=len(self.B)+1 + self.dpV=np.zeros((self.nB,self.nA),dtype=int) + self.dpG=np.zeros((self.nB,self.nA),dtype=int) + self.dpE=np.zeros((self.nB,self.nA),dtype=int) + self.dpF=np.zeros((self.nB,self.nA),dtype=int) + for i in range(1,self.nA): + #print i + for j in range(1,self.nB): + if (i,j)==(1,1): + self.dpG[j][i]=self.match_score(B[0],A[0]) + self.dpE[j][i]=0 + self.dpF[j][i]=0 + if i==1 and j>1: + self.dpG[j][i]=self.match_score(B[j-1],A[0]) + self.dpE[j][i]=min(self.dpE[j-1][i]+self.gap(j)-self.gap(j-1),self.dpV[j-1][i]+self.gap(1)) + self.dpF[j][i]=self.gap(j)+gap(1) + if i>1 and j==1: + self.dpG[j][i]=self.match_score(B[0],A[i-1]) + self.dpE[j][i]=self.gap(i)+gap(1) + self.dpF[j][i]=min(self.dpF[j][i-1]+self.gap(i)-self.gap(i-1),self.dpV[j][i-1]+self.gap(1)) + if i>1 and j>1: + self.dpG[j][i]=self.dpV[j-1][i-1]+self.match_score(B[j-1],A[i-1]) + self.dpE[j][i]=min(self.dpE[j-1][i]+self.gap(j)-self.gap(j-1),self.dpV[j-1][i]+self.gap(1)) + self.dpF[j][i]=min(self.dpF[j][i-1]+self.gap(i)-self.gap(i-1),self.dpV[j][i-1]+self.gap(1)) + + self.dpV[j][i]=min(0,self.dpE[j][i],self.dpF[j][i],self.dpG[j][i]) + + if (i,j)==(1,1): + self.minV=self.dpV[j][i] + self.mini=i + self.minj=j + else: + if self.dpV[j][i]=1 and j>=1 and self.dpV[j][i]<0: + if s==2: + R.append(self.A[i-1]) + S.append(self.B[j-1]) + #print '**',i,j,s,self.dpE[j][i],self.dpF[j][i],self.dpG[j][i],''.join(reversed(R)),''.join(reversed(S)) + i=i-1 + j=j-1 + elif s==0: + R.append('-') + S.append(self.B[j-1]) + #print '**',i,j,s,self.dpE[j][i],self.dpF[j][i],self.dpG[j][i],''.join(reversed(R)),''.join(reversed(S)) + j=j-1 + while self.dpV[j][i]<0 and j>=1 and self.dpE[j][i]+self.gap(j)-self.gap(j-1)=1 and self.dpF[j][i]+self.gap(i)-self.gap(i-1)0 and self.dpV[j][i]<0: + #R.append('-') + S.append(self.B[j-1]) + j=j-1 + + elif j==0: + while i>0 and self.dpV[j][i]<0: + #S.append('-') + R.append(self.A[i-1]) + i=i-1 + + self.Rx= ''.join(reversed(R)) + self.Sx=''.join(reversed(S)) + self.tb=True + return(self.Rx,self.Sx) + + +s=readFASTA("rosalind_loca.txt") + +def pam250_penalty(x,y): + return -pam250_score(x,y) + +def blosum62_penalty(x,y): + return -blosum62_score(x,y) + +def agap(j): + return 5*j + +#print len(s.values()[0]) +#print len(s.values()[1]) +A=s.values()[0] +B=s.values()[1] + +#A='MEANLYPRTEINSTRING' +#B='PLEASANTLYEINSTEIN' + +X=LocalAlignment(A,B,gap=agap,match_score=pam250_penalty) +(R,S)=X.aligned() +print -X.score() +print R.replace('-','') +print S.replace('-','') + + + + diff --git a/SmithWaterman.py b/SmithWaterman.py new file mode 100644 index 0000000..a6bf241 --- /dev/null +++ b/SmithWaterman.py @@ -0,0 +1,117 @@ +#This software is a free software. Thus, it is licensed under GNU General Public License version 3 or later. +#Python implementation to Smith-Waterman Algorithm for Homework 1 of Bioinformatics class. +#Forrest Bao, Sept. 26, 2007 + +import sys, string +from random import * +from numpy import * +from matplotlib import * + +alpha='cagt' +#read the first sequence +seq1='' +seq2='' +for i in range(6): + seq1=seq1+choice(alpha); + +for i in range(20): + seq2=seq2+choice(alpha); + +print seq1, "\n", seq2 + +m,n = len(seq1),len(seq2) #length of two sequences + +#generate DP table and traceback path pointer matrix +score=zeros((m+1,n+1)) #the DP table +pointer=zeros((m+1,n+1)) #to store the traceback path + +P=0; +penalty=-1 +def match_score(alpha,beta): + if alpha==beta: + return 2 + else: + return penalty + +max_score=P; #initial maximum score in DP table + +#calculate DP table and mark pointers +for i in range(1,m+1): + for j in range(1,n+1): + score_up=score[i-1][j]+penalty ; + score_down=score[i][j-1]+penalty ; + score_diagonal=score[i-1][j-1]+match_score(seq1[i-1],seq2[j-1]); + score[i][j]=max(0,score_up,score_down,score_diagonal); + if score[i][j]==0: + pointer[i][j]=0; #0 means end of the path + if score[i][j]==score_up: + pointer[i][j]=1; #1 means trace up + if score[i][j]==score_down: + pointer[i][j]=2; #2 means trace left + if score[i][j]==score_diagonal: + pointer[i][j]=3; #3 means trace diagonal + if score[i][j]>=max_score: + max_i=i; + max_j=j; + max_score=score[i][j]; +#END of DP table + +for i in range(m+1): + for j in range(n+1): + print '{0:4d}'.format(int(score[i,j])), '{0:4d}'.format(int(pointer[i][j])), '|', + print + + + + +align1,align2='',''; #initial sequences + +i,j=max_i,max_j; #indices of path starting point +#missing beginning and ending for this routine +#traceback, follow pointers +while pointer[i][j]!=0: + if pointer[i][j]==3: + align1=align1+seq1[i-1]; + align2=align2+seq2[j-1]; + i=i-1; + j=j-1; + elif pointer[i][j]==2: + align1=align1+'-'; + align2=align2+seq2[j-1]; + j=j-1; + elif pointer[i][j]==1: + align1=align1+seq1[i-1]; + align2=align2+'-'; + i=i-1; +#END of traceback + +align1=align1[::-1]; #reverse sequence 1 +align2=align2[::-1]; #reverse sequence 2 + +i,j=0,0; + +#calcuate identity, similarity, score and aligned sequeces +def result(align1,align2): + symbol=''; + found=0; + score=0; + identity,similarity=0,0; + for i in range(0,len(align1)): + if align1[i]==align2[i]: #if two AAs are the same, then output the letter + symbol=symbol+align1[i]; + identity=identity+1; + score=score+match_score(align1[i],align2[i]); + elif align1[i]=='-' or align2[i]=='-': #if one of them is a gap, output a space + symbol=symbol+' '; + score=score+match_score(align1[i],align2[i]); + + + + print 'length of common subsequence = ', identity + print 'Score =', score; + print align1 + print align2 + print symbol + #END of function result + +result(align1,align2) diff --git a/SmithWaterman2.py b/SmithWaterman2.py new file mode 100644 index 0000000..de5c7d7 --- /dev/null +++ b/SmithWaterman2.py @@ -0,0 +1,124 @@ +#This software is a free software. Thus, it is licensed under GNU General Public License version 3 or later. +#Python implementation to Smith-Waterman Algorithm for Homework 1 of Bioinformatics class. +#Forrest Bao, Sept. 26, 2007 + + +from random import * + +alpha='cagt' +#read the first sequence +seq1='' +seq2='' +for i in range(6): + seq1=seq1+choice(alpha); + +for i in range(15): + seq2=seq2+choice(alpha); + + + +seq1='gggggg' +seq2='ggctttggtcacg' + +print seq1, "\n", seq2 + +m,n = len(seq1),len(seq2) #length of two sequences + +#generate DP table and traceback path pointer matrix +score=[[float(0) for j in range(n+1)] for i in range(m+1)] +pointer=[[float(0) for j in range(n+1)] for i in range(m+1)] + + +P=0; +penalty=0 +def match_score(alpha,beta): + if alpha==beta: + return 10 + else: + return -8 + +max_score=P; #initial maximum score in DP table + +#calculate DP table and mark pointers +for i in range(1,m+1): + for j in range(1,n+1): + score_up=score[i-1][j]+penalty + score_down=score[i][j-1]+penalty + score_diagonal=score[i-1][j-1]+match_score(seq1[i-1],seq2[j-1]); + score[i][j]=max(0.0,score_up,score_down,score_diagonal); + if score[i][j]==0: + pointer[i][j]=0; #0 means end of the path + if score[i][j]==score_up: + pointer[i][j]=1; #1 means trace up + if score[i][j]==score_down: + pointer[i][j]=2; #2 means trace left + if score[i][j]==score_diagonal: + print i,j, score[i][j] + pointer[i][j]=3; #3 means trace diagonal + if score[i][j]>=max_score: + print i,j,score[i][j],max_score + max_i=i; + max_j=j; + max_score=score[i][j]; +#END of DP table + +for i in range(m+1): + for j in range(n+1): + print '{0:2f}'.format(score[i][j]), '{0:2d}'.format(int(pointer[i][j])), '|', + print + + + + +align1,align2='',''; #initial sequences + +i,j=max_i,max_j; +print "Found:", max_i, max_j, score[i][j], pointer[i][j] +#indices of path starting point +#missing beginning and ending for this routine +#traceback, follow pointers +while pointer[i][j]!=0: + if pointer[i][j]==3: + align1=align1+seq1[i-1]; + align2=align2+seq2[j-1]; + i=i-1; + j=j-1; + elif pointer[i][j]==2: + align1=align1+'-'; + align2=align2+seq2[j-1]; + j=j-1; + elif pointer[i][j]==1: + align1=align1+seq1[i-1]; + align2=align2+'-'; + i=i-1; +#END of traceback + +align1=align1[::-1]; #reverse sequence 1 +align2=align2[::-1]; #reverse sequence 2 + +i,j=0,0; + +#calcuate identity, similarity, score and aligned sequeces +def result(align1,align2): + symbol=''; + score=0; + identity,similarity=0,0; + for i in range(0,len(align1)): + if align1[i]==align2[i]: #if two AAs are the same, then output the letter + symbol=symbol+align1[i]; + identity=identity+1; + score=score+match_score(align1[i],align2[i]); + elif align1[i]=='-' or align2[i]=='-': #if one of them is a gap, output a space + symbol=symbol+' '; + score=score+penalty + + + + print 'length of common subsequence = ', identity + print 'Score =', score; + print align1 + print align2 + print symbol + #END of function result + +result(align1,align2) diff --git a/afrq.py b/afrq.py new file mode 100644 index 0000000..483861c --- /dev/null +++ b/afrq.py @@ -0,0 +1,7 @@ +from numpy import sqrt +with open("rosalind_afrq.txt","rU") as f: + line=f.readline().split() +for x in line: + print round(2*sqrt(float(x))-float(x),4), + + \ No newline at end of file diff --git a/bio.py b/bio.py new file mode 100644 index 0000000..22d9068 --- /dev/null +++ b/bio.py @@ -0,0 +1,9 @@ +from Bio import SeqIO + +f=open("angio35.nex","rU") + +e=SeqIO.parse(f,"nexus") +for x in e: + print x.id, x.seq[15:30] + + diff --git a/blosum62.py b/blosum62.py new file mode 100644 index 0000000..d5af7ee --- /dev/null +++ b/blosum62.py @@ -0,0 +1,38 @@ +import numpy as np +import itertools as it + +proteins="A C D E F G H I K L M N P Q R S T V W Y".split() +blosum62_list=map(int,("""4 0 -2 -1 -2 0 -2 -1 -1 -1 -1 -2 -1 -1 -1 1 0 0 -3 -2 +0 9 -3 -4 -2 -3 -3 -1 -3 -1 -1 -3 -3 -3 -3 -1 -1 -1 -2 -2 +-2 -3 6 2 -3 -1 -1 -3 -1 -4 -3 1 -1 0 -2 0 -1 -3 -4 -3 +-1 -4 2 5 -3 -2 0 -3 1 -3 -2 0 -1 2 0 0 -1 -2 -3 -2 +-2 -2 -3 -3 6 -3 -1 0 -3 0 0 -3 -4 -3 -3 -2 -2 -1 1 3 +0 -3 -1 -2 -3 6 -2 -4 -2 -4 -3 0 -2 -2 -2 0 -2 -3 -2 -3 +-2 -3 -1 0 -1 -2 8 -3 -1 -3 -2 1 -2 0 0 -1 -2 -3 -2 2 +-1 -1 -3 -3 0 -4 -3 4 -3 2 1 -3 -3 -3 -3 -2 -1 3 -3 -1 +-1 -3 -1 1 -3 -2 -1 -3 5 -2 -1 0 -1 1 2 0 -1 -2 -3 -2 +-1 -1 -4 -3 0 -4 -3 2 -2 4 2 -3 -3 -2 -2 -2 -1 1 -2 -1 +-1 -1 -3 -2 0 -3 -2 1 -1 2 5 -2 -2 0 -1 -1 -1 1 -1 -1 +-2 -3 1 0 -3 0 1 -3 0 -3 -2 6 -2 0 0 1 0 -3 -4 -2 +-1 -3 -1 -1 -4 -2 -2 -3 -1 -3 -2 -2 7 -1 -2 -1 -1 -2 -4 -3 +-1 -3 0 2 -3 -2 0 -3 1 -2 0 0 -1 5 1 0 -1 -2 -2 -1 +-1 -3 -2 0 -3 -2 0 -3 2 -2 -1 0 -2 1 5 -1 -1 -3 -3 -2 +1 -1 0 0 -2 0 -1 -2 0 -2 -1 1 -1 0 -1 4 1 -2 -3 -2 +0 -1 -1 -1 -2 -2 -2 -1 -1 -1 -1 0 -1 -1 -1 1 5 0 -2 -2 +0 -1 -3 -2 -1 -3 -3 3 -2 1 1 -3 -2 -2 -3 -2 0 4 -3 -1 +-3 -2 -4 -3 1 -2 -2 -3 -3 -2 -1 -4 -4 -2 -3 -3 -2 -3 11 2 +-2 -2 -3 -2 3 -3 2 -1 -2 -1 -1 -2 -3 -1 -2 -2 -2 -1 2 7 +""".strip().split())) + +blosum62_array=np.array(map(int,blosum62_list),dtype=int).reshape(20,20) + +#def blosum62(x,y): +# i=proteins.index(x) +# j=proteins.index(y) +# return blosum62_array[i][j] + +blosum62=dict(zip([X+Y for (X,Y) in it.product(proteins,proteins)],blosum62_list)) + +def blosum62_score(X,Y): + return blosum62[X+Y] + \ No newline at end of file diff --git a/catalan2.py b/catalan2.py new file mode 100644 index 0000000..b0ae252 --- /dev/null +++ b/catalan2.py @@ -0,0 +1,40 @@ + + + + + + +s=('UUAAGUAGCCGCGCCGGCUAUGCUAUAUGACGAUCGCGGCUCCGCGUAAAGAUGUCGAUC' +'GCAUUAGACGGCCCAAGUCUAGAUACGCUUACAUGUAGCAUUAAUAUGCGCGUACAUUCG' +'UAAAUAAUUGCUCGUACUAGCUCGAAGAAUUGCCUCGGUAUCGGGCAUCCGCCGGUGUCG' +'AAUCAUAUGCACGUCGGCGCACGUAAUGCAGUACAUGCGCUAUCUAGAAGCAUGCUAUAU' +'UUAAGCAU') + +def candidates(s): + bases=['A','U','C','G'] + comps=['U','A','G','C'] + pair=dict(zip(bases,comps)) + base_count=dict(zip(bases,[0,0,0,0])) + for i,x in enumerate(s): + base_count[x]+=1 + if base_count['A']==base_count['U'] and base_count['G']==base_count['C'] and pair[x]==s[0]: + yield i + +def catalan2(s,csave={}): + if len(s)==0: + return(1) + c=0 + for x in candidates(s): + try: + c1=csave[s[1:x]] + except KeyError: + csave[s[1:x]]=catalan2(s[1:x],csave) + try: + c2=csave[s[x+1:]] + except KeyError: + csave[s[x+1:]]=catalan2(s[x+1:],csave) + c+=(csave[s[1:x]]*csave[s[x+1:]]) % 1000000 + return(c) + + + \ No newline at end of file diff --git a/chbp-2.py b/chbp-2.py new file mode 100644 index 0000000..3d6821a --- /dev/null +++ b/chbp-2.py @@ -0,0 +1,52 @@ + #this one works + def orient(x): + if x[0]=='0': + return x + else: + return ''.join([str(1-int(t)) for t in x]) + + def analyze(group,character): + if len(group)==1: + return int(character[group[0]]) + collect=[[],[]] + for x in group: + z=analyze(x,character) + if z==-1: + return -1 + else: + collect[z].append(x) + if len(collect[0])==0: + return 1 + elif len(collect[1])==0: + return 0 + else: + group[:]=[] + group.append(collect[1]) + group.extend(collect[0]) + return -1 + + def lists_to_newick(g): + if len(g)==1: + return taxon_name[g[0]] + else: + s='' + for x in g: + s+=lists_to_newick(x) + s+=',' + return '(%s)'%(s[:-1]) + + + start=[[i] for i in range(len(taxa))] + + with open("rosalind_chbp.txt","rU") as f: + taxa=f.readline().split() + characters=[orient(x.strip()) for x in f.readlines()] + + taxon_name=dict(zip(range(len(taxa)),taxa)) + + for t in characters: + analyze(start,t) + + print lists_to_newick(start) + + diff --git a/chbp.py b/chbp.py new file mode 100644 index 0000000..b836872 --- /dev/null +++ b/chbp.py @@ -0,0 +1,42 @@ +f=open("rosalind_chbp.txt","rU") +taxa=f.readline().split() +taxon_names=dict(zip(range(len(taxa)),taxa)) +characters=[x.strip() for x in f.readlines()] +def LR(leafs,ch): + left=[leafs[i] for i in range(len(leafs)) if ch[leafs[i]]==ch[leafs[0]]] + right=[leafs[i] for i in range(len(leafs)) if ch[leafs[i]]!=ch[leafs[0]]] + return left,right + + +def build_subtree(leafs,characters): + if len(characters)==0: + return ','.join([taxon_names[leafs[i]] for i in range(len(leafs))]) + if len(leafs)==2: + return '(%s,%s)'%(taxon_names[leafs[0]],taxon_names[leafs[1]]) + elif len(leafs)==1: + return '%s'%taxon_names[leafs[0]] + elif len(leafs)==0: + return '' + (left,right)=LR(leafs,characters[0]) + print 'Left',[taxon_names[x] for x in left] + print 'Right',[taxon_names[x] for x in right] + left_tree=build_subtree(left,characters[1:]) + right_tree=build_subtree(right,characters[1:]) + if len(left_tree)==0: + return '%s'%right_tree + elif len(right_tree)==0: + return '%s'%left_tree + else: + return '(%s,%s)'%(left_tree,right_tree) + +def build_tree(leafs,characters): + (left,right)=LR(leafs,characters[0]) + left_tree=build_subtree(left,characters[1:]) + right_tree=build_subtree(right,characters[1:]) + if left_tree[0]=='(': + left_tree=left_tree[1:-1] + elif right_tree[0]=='(': + right_tree=right_tree[1:-1] + return '(%s,%s)'%(left_tree,right_tree) + +s=build_tree(range(len(taxa)),characters) \ No newline at end of file diff --git a/conv.py b/conv.py new file mode 100644 index 0000000..5b42dd1 --- /dev/null +++ b/conv.py @@ -0,0 +1,18 @@ +from collections import defaultdict,Counter +import operator + +with open("rosalind_conv.txt","rU") as f: + S1=f.readline().split() + S2=f.readline().split() + +S1=map(float,S1) +S2=map(float,S2) + + +s=defaultdict(int) + +for x in S1: + for y in S2: + s[round(x-y,6)]+=1 + +sorted_x=sorted(s.iteritems(),key=operator.itemgetter(1)) \ No newline at end of file diff --git a/corrections.py b/corrections.py new file mode 100644 index 0000000..ad7f8c6 --- /dev/null +++ b/corrections.py @@ -0,0 +1,107 @@ +#!/usr/bin/python +from collections import defaultdict +from bisect import bisect + +value,key,s="","",{} + +comp={'A':'T','T':'A','G':'C','C':'G'} +counts=defaultdict(lambda: 0) +def revcomp(s): + t="" + for x in s[::-1]: + t+=comp[x] + return(t) + +with open("rosalind_corr.txt","rU") as f: + for x in f: + if x[0]!=">": + value=value+x.strip() + else: + if key!="": s[key]=value + key=x[1:].strip() + value="" + s[key]=value + + +for x in s.values(): + rx=revcomp(x) + if rx>x: + counts[rx]+=1 + else: + counts[x]+=1 + +lgood=sorted([t for t in counts.keys() if counts[t]>1]) +lbad=[t for t in counts.keys() if counts[t]<=1] +weird=[] +answers=[] +testcount=0 +for z in lbad: + m=bisect(lgood, z) + counter=0 + if m",lgood[m] + answers.append((z,lgood[m])) + testcount+=1 + continue + if m>0: + for i,x in enumerate(lgood[m-1]): + if x!=z[i]: + if counter==1: + counter=0 + break + else: + counter+=1 + else: + # print z, "->",lgood[m-1] + answers.append((z,lgood[m-1])) + testcount+=1 + continue + weird.append(z) + + +print '========' +testcount=0 +for x in weird: + for i in range(len(x)): + for c in ['A','G','T','C']: + xchange=x[0:i]+c+x[i+1:] + if revcomp(xchange)>xchange: + xchange=revcomp(xchange) + xuse=revcomp(x) + else: + xuse=x + m=bisect(lgood,xchange) + if m>0 and xchange==lgood[m-1]: + answers.append((xuse,lgood[m-1])) + testcount+=1 + + if m"+v + # print [i for i,x in enumerate(u) if x!=v[i]] + else: + print revcomp(u)+'->'+revcomp(v) + #print [i for i,x in enumerate(revcomp(u)) if x!=revcomp(v)[i]] + + + + + + + + + + \ No newline at end of file diff --git a/count.py b/count.py new file mode 100644 index 0000000..bdfb979 --- /dev/null +++ b/count.py @@ -0,0 +1,7 @@ +#!/usr/bin/python + +import string +import sys + +line=sys.stdin.readline() +print string.translate(line[::-1],string.maketrans('CAGT','GTCA')) diff --git a/cset.py b/cset.py new file mode 100644 index 0000000..31a718f --- /dev/null +++ b/cset.py @@ -0,0 +1,34 @@ +L=[] +S=[] +with open("rosalind_cset.txt","rU") as f: + for line in f: + S.append(line.strip()) + L.append(int(line.strip(),2)) + +l=len(S[0]) +def flip(x): + return (~x)+(1<<(l)) + + +def check(x,y): + if x&flip(y)!=0 and x&y!=0 and flip(x)&y!=0 and flip(x)&flip(y)!=0: + return False + else: + return True + +jsave=0 + +for i,x in enumerate(L): + j=0 + for k,y in enumerate(L): + if not check(x,y): + j+=1 + + if j>jsave: + bad=i + jsave=j + +for i,x in enumerate(S): + if i!=bad: + print x + \ No newline at end of file diff --git a/cstr.py b/cstr.py new file mode 100644 index 0000000..1d0ee55 --- /dev/null +++ b/cstr.py @@ -0,0 +1,30 @@ +from fasta import readFASTA + +f=open("rosalind_cstr (1).txt","rU") + +dna=[x.strip() for x in f.readlines()] + +base=dna[0] +chartable=[] +for i,x in enumerate(base): + row='' + count_0,count_1=0,0 + for y in dna: + if x==y[i]: + row+='1' + count_1+=1 + else: + row+='0' + count_0+=1 + if count_0>1 and count_1>1: + chartable.append(row) + + + + +f.close() +f=open("cstr_out.txt","w") +for x in chartable: + f.write(x+'\n') +f.close() + \ No newline at end of file diff --git a/dbru.py b/dbru.py new file mode 100644 index 0000000..fd24362 --- /dev/null +++ b/dbru.py @@ -0,0 +1,22 @@ +import string + +mers=set() +edges=set() +nodes=set() +RC=string.maketrans('CAGT','GTCA') +with open("rosalind_dbru.txt","rU") as f: + for line in f: + mers.add(line.strip()) + mers.add(line.strip().translate(RC)[::-1]) + +n=len(line.strip()) +for x in mers: + nodes.add(x[0:n-1]) + nodes.add(x[1:n]) + edges.add((x[0:n-1],x[1:n])) + +with open("dbru.out","w") as f: + for x in edges: + f.write('('+x[0]+', '+x[1]+')\n') + + \ No newline at end of file diff --git a/dmatrix.py b/dmatrix.py new file mode 100644 index 0000000..3d99619 --- /dev/null +++ b/dmatrix.py @@ -0,0 +1,12 @@ +import fasta + +def hdist(x,y): + return len([i for i,t in enumerate(x) if t!=y[i]]) + +s=fasta.readFASTA("rosalind_pdst.txt") + +for x in s.values(): + for y in s.values(): + print '%1.5f ' % (float(hdist(x,y))/len(x)), + print + diff --git a/ebin.py b/ebin.py new file mode 100644 index 0000000..e8d2193 --- /dev/null +++ b/ebin.py @@ -0,0 +1,10 @@ +with open("rosalind_ebin.txt","rU") as f: + line1=f.readline().strip() + line2=f.readline().strip() + +n=float(line1) +nums=line2.split() +fnums=map(float,nums) +for x in fnums: + print round(n*x,3), + diff --git a/edit2.py b/edit2.py new file mode 100644 index 0000000..95bdcfc --- /dev/null +++ b/edit2.py @@ -0,0 +1,84 @@ +from fasta import readFASTA +import numpy as np +import string +import operator as op + +# this version of the program computes an optimal global alignment +# of two strings (read from the file rosalind_edta.txt in FASTA format) +# using a scoring system that counts gaps and substitutions each with +# penalty 1. In other words it minimizes the edit distance. + +#s=readFASTA("rosalind_edta.txt") + +#A=s.values()[0] +#B=s.values()[1] + +A='CAGCACTTGGATTCTCGG' +B='CAGCGTGG' + +nA=len(A)+1 +nB=len(B)+1 + +#dp[j][i] is the minimum edit distance for A[:i] and B[:j] +#note that the range of i,j is zero up to + +dp=np.zeros((nB,nA),dtype=int) +pointerx=np.zeros((nB,nA),dtype=int) +pointery=np.zeros((nB,nA),dtype=int) + + +# initialization +for i in range(nA): + dp[0][i]=i + pointery[0][i]=-1 + +for j in range(nB): + dp[j][0]=j + pointerx[j][0]=-1 + +for i in range(1,nA): + for j in range(1,nB): + if A[i-1]==B[j-1]: + z=-1 + else: + z=1 + #print i,j,A[i-1],B[j-1] + t=[(dp[j-1][i]+1,(-1,0,1)),(dp[j][i-1]+1,(0,-1,1)),(dp[j-1][i-1]+z,(-1,-1,z))] + (t,(dx,dy,z))=min(t,key=lambda x: op.getitem(x,0)) + #print t,dx,dy,z + dp[j][i]=dp[j+dx][i+dy]+z + pointerx[j][i],pointery[j][i]=dx,dy + + + +AX=[] +BX=[] + +i,j=nA-1,nB-1 +while True: +# print i,j,pointery[j][i],pointerx[j][i], + if (pointerx[j][i],pointery[j][i])==(-1,-1): + AX.append(A[i-1]) + BX.append(B[j-1]) + # print (-1,-1) + elif (pointerx[j][i],pointery[j][i])==(-1,0): + BX.append(B[j-1]) + AX.append('-') +# print (-1,0) + elif (pointerx[j][i],pointery[j][i])==(0,-1): + BX.append('-') + AX.append(A[i-1]) + # print (0,-1) +# print i,j + i,j=i+pointery[j][i],j+pointerx[j][i] + # print i,j + if i<=0 and j<=0: + break + +print dp[nB-1][nA-1] +print ''.join(reversed(AX)) +print ''.join(reversed(BX)) + + + + diff --git a/elegant_laff.py b/elegant_laff.py new file mode 100644 index 0000000..2811437 --- /dev/null +++ b/elegant_laff.py @@ -0,0 +1,28 @@ +#This solution is due to Timothy Loh from the Rosalind Web site +# I don't understand it (yet) but the claim is that it uses linear space +# and is able to recover the substrings (start and end) without backtracking + + +def go(GAP_OPEN, GAP_EXT, s, t, table): + # note: open is 12 here instead of 11 + best = (-1, 0, 0, 0, 0) # score, s0, t0, s1, t1 + m = l = [(0, i, 0) for i in range(len(s)+1)] + def add(tp, v): + return tp[0]+v, tp[1], tp[2] + for ti,c in enumerate(t, 1): + l2 = [(0, 0, ti)] + mx = l2[0] + for si,c2 in enumerate(s,1): + l2.append(max( + add(m[si], -GAP_OPEN), + add(mx, -GAP_OPEN), + add(l[si-1], table[c][c2]), + (0, si, ti) + )) + mx = max(add(mx, -GAP_EXT), l2[-1]) + if l2[-1][0] > best[0]: + best = l2[-1] + (si, ti) + m = [max(add(si, -GAP_EXT), j) for si,j in zip(m, l2)] + l = l2 + return best + diff --git a/eubt.py b/eubt.py new file mode 100644 index 0000000..54a3932 --- /dev/null +++ b/eubt.py @@ -0,0 +1,44 @@ +def lists_to_newick(g): + if type(g)==str: + return g + else: + s='' + for x in g: + s+=lists_to_newick(x) + s+=',' + return '(%s)'%(s[:-1]) + + + +def LR(x): + n=2**(len(x)-1) + for i in xrange(1,n): + L,R=[],[] + for j in xrange(len(x)): + if i%2==0: + L.append(x[j]) + else: + R.append(x[j]) + i=i/2 + yield L,R + +def trees(z): + if len(z)==2: + yield [z[0],z[1]] + elif len(z)==1: + yield z[0] + else: + for (L,R) in LR(z): + for left_subtree in trees(L): + for right_subtree in trees(R): + yield [left_subtree,right_subtree] + + +#z=['a','b','c','d'] + +#x=z[1:] + +#for t in trees(x): +# print '(%s)%s;'%(lists_to_newick(t),z[0]) + + diff --git a/exp.py b/exp.py new file mode 100644 index 0000000..6d8958b --- /dev/null +++ b/exp.py @@ -0,0 +1,43 @@ +import random +import dendropy +from dendropy import treesim + +def generate(birth_rates, death_rates): + assert len(birth_rates) == len(death_rates) + tree = dendropy.Tree() + for i, br in enumerate(birth_rates): + tree = treesim.birth_death(birth_rates[i], + death_rates[i], + max_time=random.randint(1,8), + tree=tree, + assign_taxa=False, + repeat_until_success=True) + print(tree.as_string('newick')) + tree.randomly_assign_taxa(create_required_taxa=True) + return tree + +tree = generate([0.1, 0.6, 0.1], [0.1, 0.6, 0.1]) +print(tree.as_string('newick')) + +import dendropy + +citation = """\ +@article{HeathHH2012, + Author = {Tracy A. Heath and Mark T. Holder and John P. Huelsenbeck}, + Doi = {10.1093/molbev/msr255}, + Journal = {Molecular Biology and Evolution}, + Number = {3}, + Pages = {939-955}, + Title = {A {Dirichlet} Process Prior for Estimating Lineage-Specific Substitution Rates.}, + Url = {http://mbe.oxfordjournals.org/content/early/2011/11/04/molbev.msr255.abstract}, + Volume = {29}, + Year = {2012} + } +""" + + +dataset = dendropy.DataSet.get_from_string( + "(A,(B,(C,(D,E))));", + "newick") +dataset.annotations.add_citation(citation) +print dataset.as_string("nexml") diff --git a/expected.py b/expected.py new file mode 100644 index 0000000..2339d97 --- /dev/null +++ b/expected.py @@ -0,0 +1,17 @@ +from math import log,exp + +with open("rosalind_eval.txt","rU") as f: + N=int(f.readline()) + S=f.readline().strip('\n') + A=map(float,f.readline().split()) + +print N +print S +print A + +k=len(S) +nAT=sum(x in {'A','T'} for x in S) + +for x in A: + z=round((N+1-k)*(x/2)**(k-nAT)*((1-x)/2)**nAT,3) + print "%.3f" % (z), \ No newline at end of file diff --git a/fasta.py b/fasta.py new file mode 100644 index 0000000..3f43318 --- /dev/null +++ b/fasta.py @@ -0,0 +1,19 @@ +#!/usr/bin/python +from collections import OrderedDict + +def readFASTA(name): + value,key="","" + s=OrderedDict({}) + with open(name,"rU") as f: + for x in f: + if x[0]!=">": + value=value+x.strip() + else: + if key!="": + s[key]=value + key=x[1:].strip() + value="" + s[key]=value + return(s) + + diff --git a/find.py b/find.py new file mode 100644 index 0000000..dac246d --- /dev/null +++ b/find.py @@ -0,0 +1,10 @@ +#!/usr/bin/python +s='ATACCCATATACCCAGAATACCCAATACCCAGCTCTATACCCACTAAATACCCAATACCCACAAATACCCACCATACCCAATGAGATACCCATGACGGGATACCCATATACCCAGAAAATACCCAAATATACCCAATCTCGATACCCAATACCCAATGTGATACCCAGGTCTACATACCCAATACCCATAAGTATACCCACCACATACCCAATACCCAATACCCATACTCAAATACCCATATACCCAAGGTATTGAGATACCCAACATACCCACACATACCCACGCCATACCCAGATACCCAATACCCATCCCCACATACCCACGTATACCCAATACCCATCATACCCAGAACACATAATACCCACCAATACCCAGAATACCCACCGATACCCAGGGATACCCAACATACCCAATACCCAATACCCAGATATACCCAATACCCAATACCCATCGAATACCCACTCCTCTCATACCCATAGATACCCAACGAGGGGTTCGCCATACCCAGAATACCCAAGATACCCAGAGATACCCACGATACCCACGATACCCAATACCCACTCAGGTCGAAAACGTTTAGAGTGATACCCAAATACCCAGTATACCCAGATACCCACTGTATACCCATCGTAGTCTAGAATACCCAATACCCAGCGGATACCCAATACCCAATACCCAGGTCAGATACATACCCAATACCCATATACCCAATACCCAATACCCAGATACCCAGATACCCAAATACCCAATACCCAGATACCCAATACCCATATACCCAGATACCCATATACCCAATGGATACCCAATACCCATTATACCCAATACCCAATACCCAAGTTGGATACCCAAATACCCAA' +t='ATACCCAAT' +j=0 +while True: + i=s.find(t,j) + if i<0: + break + print i+1, + j=i+1 diff --git a/foun.py b/foun.py new file mode 100644 index 0000000..2db903b --- /dev/null +++ b/foun.py @@ -0,0 +1,34 @@ +import numpy as np +from scipy.misc import comb +from math import log10 + +with open("rosalind_foun.txt","rU") as f: + line1=f.readline().strip() + line2=f.readline().strip() + +e=map(float,line1.split()) +popsize,generations=e[0],e[1] +alleles=map(float,line2.split()) +print popsize,generations +print alleles + +N=2*popsize +# m is the transition matrix for the wright-fisher markov chain +m=np.zeros((N+1,N+1)) +for i in np.arange(N+1): + for j in np.arange(N+1): + m[j,i]=comb(N,j)*(i/N)**j*((N-i)/N)**(N-j) + +b=np.zeros((int(generations),len(alleles))) +for j,x in enumerate(alleles): + pop=np.zeros(N+1) + pop[x]=1 + newpop=pop + for i in np.arange(generations): + newpop=m.dot(newpop) + b[i,j]= log10(newpop[0]) + +for i in np.arange(generations): + for j in range(len(alleles)): + print b[i,j], + print diff --git a/full.py b/full.py new file mode 100644 index 0000000..cb00d4b --- /dev/null +++ b/full.py @@ -0,0 +1,41 @@ +from itertools import combinations +from collections import Counter + +protein_mass={} +mass_to_protein={} +with open("protein_masses.txt","rU") as f: + for line in f: + x=line.split() + protein_mass[x[0]]=round(float(x[1]),11) + mass_to_protein[round(float(x[1]),11)]=x[0] + +def mass(x): + m=0 + for s in x: + m+=protein_mass[s] + return m + +masses=[] +with open("rosalind_full.txt","rU") as f: + total_mass=round(float(f.readline().strip()),6) + for line in f: + masses.append(float(line.strip())) + + +masses.sort() +m=masses[0] +i=1 +s='' +z=(len(masses)-2)/2 +while True: + w=round(masses[i]-m,6) + if w in mass_to_protein: + s+=mass_to_protein[w] + m=masses[i] + i+=1 + if i==len(masses) or len(s)==z: + break + +print s + + \ No newline at end of file diff --git a/global_alignment.py b/global_alignment.py new file mode 100644 index 0000000..c027765 --- /dev/null +++ b/global_alignment.py @@ -0,0 +1,113 @@ +import numpy as np + +# this is an implementation of the needleman-wunsch algorithm +# and it should handle the affine gap situation +# the match_score algorithm should score positive numbers for mismatches +# the gap function should score positive numbers for gaps +# the returned value should be AS SMALL AS POSSIBLE so negative numbers +# are "good" + +class GlobalAlignment: + def __init__(self,A,B,match_score=None,gap=None): + if match_score is None: + def match_score(A,B): + if A!=B: + return 1 + else: + return -1 + self.match_score=match_score + if gap is None: + def gap(x): + return x + self.gap=gap + + self.Rx=None + self.Sx=None + self.tb=False + self.A=A + self.B=B + self.nA=len(self.A)+1 + self.nB=len(self.B)+1 + self.dpV=np.zeros((self.nB,self.nA),dtype=int) + self.dpG=np.zeros((self.nB,self.nA),dtype=int) + self.dpE=np.zeros((self.nB,self.nA),dtype=int) + self.dpF=np.zeros((self.nB,self.nA),dtype=int) + for i in range(1,self.nA): + for j in range(1,self.nB): + if (i,j)==(1,1): + self.dpG[j][i]=self.match_score(B[0],A[0]) + self.dpE[j][i]=self.gap(1)+self.gap(1) + self.dpF[j][i]=self.gap(1)+self.gap(1) + if i==1 and j>1: + self.dpG[j][i]=self.match_score(B[j-1],A[0])+self.gap(j-1) + self.dpE[j][i]=min(self.dpE[j-1][i]+self.gap(j)-self.gap(j-1),self.dpV[j-1][i]+self.gap(1)) + self.dpF[j][i]=self.gap(j)+self.gap(1) + if i>1 and j==1: + self.dpG[j][i]=self.match_score(B[0],A[i-1])+self.gap(i-1) + self.dpE[j][i]=self.gap(i)+self.gap(1) + self.dpF[j][i]=min(self.dpF[j][i-1]+self.gap(i)-self.gap(i-1),self.dpV[j][i-1]+self.gap(1)) + if i>1 and j>1: + self.dpG[j][i]=self.dpV[j-1][i-1]+self.match_score(B[j-1],A[i-1]) + self.dpE[j][i]=min(self.dpE[j-1][i]+self.gap(j)-self.gap(j-1),self.dpV[j-1][i]+self.gap(1)) + self.dpF[j][i]=min(self.dpF[j][i-1]+self.gap(i)-self.gap(i-1),self.dpV[j][i-1]+self.gap(1)) + self.dpV[j][i]=min(self.dpE[j][i],self.dpF[j][i],self.dpG[j][i]) + + def score(self): + return self.dpV[self.nB-1][self.nA-1] + + def aligned(self): + if self.tb: + return (self.Rx,self.Sx) + i=self.nA-1 + j=self.nB-1 + R=[] + S=[] + s=np.argmin([self.dpE[j][i],self.dpF[j][i],self.dpG[j][i]]) + while i>=1 and j>=1: + if s==2: + R.append(self.A[i-1]) + S.append(self.B[j-1]) + # print '**',i,j,s,self.dpE[j][i],self.dpF[j][i],self.dpG[j][i],''.join(reversed(R)),''.join(reversed(S)) + i=i-1 + j=j-1 + elif s==0: + R.append('-') + S.append(self.B[j-1]) + #print '**',i,j,s,self.dpE[j][i],self.dpF[j][i],self.dpG[j][i],''.join(reversed(R)),''.join(reversed(S)) + j=j-1 + while j>=1 and self.dpE[j][i]+self.gap(j)-self.gap(j-1)=1 and self.dpF[j][i]+self.gap(i)-self.gap(i-1)0: + R.append('-') + S.append(self.B[j-1]) + j=j-1 + elif j==0: + while i>0: + S.append('-') + R.append(self.A[i-1]) + i=i-1 + self.Rx= ''.join(reversed(R)) + self.Sx=''.join(reversed(S)) + self.tb=True + return(self.Rx,self.Sx) + + + + + + \ No newline at end of file diff --git a/indc.py b/indc.py new file mode 100644 index 0000000..7b758a4 --- /dev/null +++ b/indc.py @@ -0,0 +1,31 @@ +from numpy import log10 + +def logfact(n): + if n==0: + return 0 + s=0 + for i in xrange(1,n+1): + s=s+log10(i) + return s + +def logbinom(p,q): + return (logfact(p)-logfact(q)-logfact(p-q)) + +def fact(n): + if n==0: + return 1 + else: + return n*fact(n-1) + +def binom(p,q): + return fact(p)/fact(q)/fact(p-q) + +N=41 +T=[binom(2*N,i) for i in xrange(2*N+1)] +s=[T[0]] +for i,x in enumerate(T[1:]): + s.append(s[i]+x) + +for x in reversed(s[:-1]): + print round(log10(float(x))-N*log10(4),3), + \ No newline at end of file diff --git a/itwv.py b/itwv.py new file mode 100644 index 0000000..d2f306c --- /dev/null +++ b/itwv.py @@ -0,0 +1,37 @@ +import numpy as np +patterns=[] + +with open("rosalind_itwv.txt","rU") as f: + base=f.readline().strip() + for line in f: + patterns.append(line.strip()) + +n=len(base) +plen=len(patterns) +m=np.zeros((plen,plen),dtype=int) +def test(x,y,base,i): + if x=='': + return base[i:].startswith(y) + elif y=='': + return base[i:].startswith(x) + if (x[0]==base[i] and test(x[1:],y,base,i+1)): + return True + if (y[0]==base[i] and test(x,y[1:],base,i+1)): + return True + return False + +for i in xrange(plen): + for j in xrange(i,plen): + for k in xrange(n-len(patterns[i])-len(patterns[j])+1): + if test(patterns[i],patterns[j],base,k): + m[i,j]=1 + m[j,i]=1 + break + +with open("itwv.out","w") as f: + for i in range(plen): + for j in range(plen): + f.write( str(m[i,j])+' ') + f.write('\n') + + \ No newline at end of file diff --git a/jtsuffix.py b/jtsuffix.py new file mode 100644 index 0000000..ea9261d --- /dev/null +++ b/jtsuffix.py @@ -0,0 +1,304 @@ +#!/usr/bin/python + +class Node(object): + """A node in the suffix tree. + + suffix_node + the index of a node with a matching suffix, representing a suffix link. + -1 indicates this node has no suffix link. + + depth + depth of the node in the tree + """ + def __init__(self,depth=0): + self.suffix_node = -1 + self.depth=depth + + def __repr__(self): + return "Node(suffix link: %d, depth: %d)"%(self.suffix_node,self.depth) + +class Edge(object): + """An edge in the suffix tree. + + first_char_index + index of start of string part represented by this edge + + last_char_index + index of end of string part represented by this edge + + source_node_index + index of source node of edge + + dest_node_index + index of destination node of edge + """ + def __init__(self, first_char_index, last_char_index, source_node_index, dest_node_index): + self.first_char_index = first_char_index + self.last_char_index = last_char_index + self.source_node_index = source_node_index + self.dest_node_index = dest_node_index + + @property + def length(self): + return self.last_char_index - self.first_char_index + + def __repr__(self): + return 'Edge(%d, %d, %d %d)'% (self.source_node_index, self.dest_node_index + ,self.first_char_index, self.last_char_index ) + + +class Suffix(object): + """Represents a suffix from first_char_index to last_char_index. + + source_node_index + index of node where this suffix starts + + first_char_index + index of start of suffix in string + + last_char_index + index of end of suffix in string + """ + def __init__(self, source_node_index, first_char_index, last_char_index): + self.source_node_index = source_node_index + self.first_char_index = first_char_index + self.last_char_index = last_char_index + + + def __repr__(self): + return 'Suffix(%d, %d, %d)'%(self.source_node_index,self.first_char_index,self.last_char_index) + + @property + def length(self): + return self.last_char_index - self.first_char_index + + def explicit(self): + """A suffix is explicit if it ends on a node. first_char_index + is set greater than last_char_index to indicate this. + """ + return self.first_char_index > self.last_char_index + + def implicit(self): + return self.last_char_index >= self.first_char_index + + +class SuffixTree(object): + """A suffix tree for string matching. Uses Ukkonen's algorithm + for construction. + """ + def __init__(self, string, case_insensitive=False): + """ + string + the string for which to construct a suffix tree + """ + self.string = string + self.case_insensitive = case_insensitive + self.N = len(string) - 1 + self.nodes = [Node()] + self.edges = {} + self.alphabet={} + self.active = Suffix(0, 0, -1) + if self.case_insensitive: + self.string = self.string.lower() + for i in range(len(string)): + self._add_prefix(i) + self._add_to_alphabet(self.string[i]) + + + def __repr__(self): + """ + Lists edges in the suffix tree + """ + s="" + for x in self.alphabet.keys(): + s+=x + curr_index = self.N + s = "\tDepth \tStart \tEnd \tSuf \tFirst \tLast \tString\n" + values = self.edges.values() + values.sort(key=lambda x: (self.nodes[x.source_node_index].depth,self.nodes[x.source_node_index])) + for edge in values: + if edge.source_node_index == -1: + continue + s += "\t%s \t%s \t%s \t%s \t%s \t%s \t"%(self.nodes[edge.source_node_index].depth, edge.source_node_index + ,edge.dest_node_index + ,self.nodes[edge.dest_node_index].suffix_node + ,edge.first_char_index + ,edge.last_char_index) + + + top = min(curr_index, edge.last_char_index) + s += self.string[edge.first_char_index:top+1] + "\n" + return s + + def _add_to_alphabet(self,char): + self.alphabet[char]=1 + + def _add_prefix(self, last_char_index): + """The core construction method. + """ + last_parent_node = -1 + + while True: + # the current phase of the algorithm is given by last_char_index + # the current suffix being inserted is given by the path from the root to self.active.source_node_index + # followed by the string from self.active.first_char_index to the last_char_index in self.string + # So it is of the form (A)(string[self.active.first_char_index..self.active.last_char_index])(self.string[last_char_index]) [***] + # and the path (A) ends at the node self.active.source_node_index + + # any splits will occur in an edge from self.active.source_node_index + # we need to remember this node for the purposes of creating suffix links + + + parent_node = self.active.source_node_index + + if self.active.explicit(): + # active is at a node (meaning that the middle piece of the form [***] is missing + if (self.active.source_node_index, self.string[last_char_index]) in self.edges: + # Rule 3 (do nothing): edge leaving source_node_index is marked with the last character of active suffix + # prefix is already in tree + break + else: + # active is in the middle of an edge from source node in the direction of active.first_char_index + e = self.edges[self.active.source_node_index, self.string[self.active.first_char_index]] + if self.string[e.first_char_index + self.active.length + 1] == self.string[last_char_index]: + # Rule 3 (do nothing): suffix lies in middle of an edge + # prefix is already in tree + break + + # Rule 2 in the middle of an edge, we know that at least one path continues, we must split edge + + # Also, this new internal node will have a suffix link to it from "last_parent_node" + # assuming last parent node isn't the root (this happens a bit later) + + parent_node = self._split_edge(e, self.active) + + # either active is at a node, but there is no edge marked with the last character of active suffix + # OR we're in Rule 2, we just split the edge, and parent_node is now the new node + # we add the new leaf node in either case (Rule 2) + + + self.nodes.append(Node(self.nodes[parent_node].depth+1)) + e = Edge(last_char_index, self.N, parent_node, len(self.nodes) - 1) + self._insert_edge(e) + + # here's where we put in the suffix link to the parent of the newly created node + # from the previous parent + + if last_parent_node > 0: + self.nodes[last_parent_node].suffix_node = parent_node + + # Remember the parent for future suffix links + + last_parent_node = parent_node + + # if the active node is the root, then the next prefix to consider is obtained by just incrementing + # the first_char_index; otherwise, the next prefix to consider is obtained by following a suffix + # link. Suppose the suffix link goes from v to s(v). Write the path to v in the form XA with X a single character and A a string + # then the path to the node s(v) is A. In other words, either way (i.e. from the root or via a suffix link) + # we have moved to the next extension in this phase. + + if self.active.source_node_index == 0: + self.active.first_char_index += 1 + else: + self.active.source_node_index = self.nodes[self.active.source_node_index].suffix_node + + + # traverse the tree along the active suffix, sucking up edges until the either + # the suffix becomes explicit or the end of the prefix lies in the middle of an edge + # leaving the active node + + self._canonize_suffix(self.active) + + # we get here after a "Rule 3" situation, meaning that all of "suffix" is + # implicitly in the tree. We have to finish up by creating the last suffix link + # and moving down the tree so the end of the suffix lies within an edge leaving + # the active node. + + if last_parent_node > 0: + self.nodes[last_parent_node].suffix_node = parent_node + self.active.last_char_index += 1 + self._canonize_suffix(self.active) + + def _insert_edge(self, edge): + self.edges[(edge.source_node_index, self.string[edge.first_char_index])] = edge + + def _remove_edge(self, edge): + self.edges.pop((edge.source_node_index, self.string[edge.first_char_index])) + + def _split_edge(self, edge, suffix): + self.nodes.append(Node(self.nodes[suffix.source_node_index].depth+1)) + e = Edge(edge.first_char_index, edge.first_char_index + suffix.length, suffix.source_node_index, len(self.nodes) - 1) + self._remove_edge(edge) + self._insert_edge(e) + self.nodes[e.dest_node_index].suffix_node = suffix.source_node_index ### need to add node for each edge + edge.first_char_index += suffix.length + 1 + edge.source_node_index = e.dest_node_index + self._insert_edge(edge) + return e.dest_node_index + + def _canonize_suffix(self, suffix): + """This canonizes the suffix, walking along its suffix string until it + is explicit or there are no more matched nodes. + """ + if not suffix.explicit(): + e = self.edges[suffix.source_node_index, self.string[suffix.first_char_index]] + if e.length <= suffix.length: + suffix.first_char_index += e.length + 1 + suffix.source_node_index = e.dest_node_index + self._canonize_suffix(suffix) + + + def _count_leaves_below(self,node): + children=[]; j=0 ; n=1 + for x in self.alphabet.keys(): + e=self.edges.get((node,x)) + if e: + j+=self.count_leaves_below(e.dest_node_index) + n=0 + return max(n,j) + + + # Public methods + def find_substring(self, substring): + """Returns the index of substring in string or -1 if it + is not found. + """ + if not substring: + return -1 + if self.case_insensitive: + substring = substring.lower() + curr_node = 0 + i = 0 + while i < len(substring): + edge = self.edges.get((curr_node, substring[i])) + if not edge: + return -1 + ln = min(edge.length + 1, len(substring) - i) + if substring[i:i + ln] != self.string[edge.first_char_index:edge.first_char_index + ln]: + return -1 + i += edge.length + 1 + curr_node = edge.dest_node_index + return self.count_leaves_below(curr_node) + + + def count_leaves_below(self,node): + children=[]; j=0 ; n=1 + for x in self.alphabet.keys(): + e=self.edges.get((node,x)) + if e: + j+=self.count_leaves_below(e.dest_node_index) + n=0 + return max(n,j) + + + + def has_substring(self, substring): + return self.find_substring(substring) != -1 + + + + +t='banana$' +s='ab' +n=SuffixTree(t) +print n diff --git a/kmer.py b/kmer.py new file mode 100644 index 0000000..c20a285 --- /dev/null +++ b/kmer.py @@ -0,0 +1,17 @@ +from collections import Counter +from itertools import product +from fasta import readFASTA + +z=Counter() +s=readFASTA("rosalind_kmer.txt") +dna=s.values()[0] + +for i in range(len(dna)-3): + z[dna[i:i+4]]+=1 + +for i in [''.join(s) for s in product("ACGT",repeat=4)]: + print i, z[i] + + + + diff --git a/kmp.py b/kmp.py new file mode 100644 index 0000000..1ba8791 --- /dev/null +++ b/kmp.py @@ -0,0 +1,38 @@ +# Preprocessing phase of Knuth-Morris-Pratt algorithm +import numpy as np +from fasta import readFASTA + +d=readFASTA("rosalind_kmp.txt") +s=d.values()[0] + +answer=np.zeros(len(s),dtype=int) +answer[0]=-1 + +# s[0:ans[j]]=s[j+1-n:j+1] + +for i in range(1,len(s)): + j=answer[i-1] + while True: + if s[j]==s[i]: + answer[i]=j+1 + break + else: + if j==0: + answer[i]=0 + break + else: + j=answer[j-1] + +f=open("kmp.out","w") +f.write("0 ") +print '0', +for x in range(1,len(s)): + f.write(str(answer[x])+' ') + print str(x), + + + + + + + diff --git a/kmp2.py b/kmp2.py new file mode 100644 index 0000000..19b0a7a --- /dev/null +++ b/kmp2.py @@ -0,0 +1,36 @@ +# Preprocessing phase of Knuth-Morris-Pratt algorithm +import numpy as np +from fasta import readFASTA + +#d=readFASTA("rosalind_kmp.txt") +#s=d.values()[0] +s='CAGCATGGTATCACAGCAGAG' +answer=np.zeros(len(s),dtype=int) +answer[0]=-1 + +# s[0:ans[j]]=s[j+1-n:j+1] + + +for i in range(1,len(s)): + j=answer[i-1] + while s[j]!=s[i]: + if j==0: + break + else: + j=answer[j-1] + else: + answer[i]=j+1 + +f=open("kmp.out","w") +f.write("0 ") +print '0', +for x in range(1,len(s)): + f.write(str(answer[x])+' ') + print str(answer[x]), + + + + + + + diff --git a/laff.py b/laff.py new file mode 100644 index 0000000..de4715d --- /dev/null +++ b/laff.py @@ -0,0 +1,20 @@ +from LocalAlignment import * +from scores import * +from fasta import * + +s=readFASTA("rosalind_laff.txt") + +def pam250_penalty(x,y): + return -pam250_score(x,y) + +def blosum62_penalty(x,y): + return -blosum62_score(x,y) + +def agap(j): + return 10+j + +X=LocalAlignment(s.values()[0],s.values()[1],gap=agap,match_score=blosum62_penalty) +(R,S)=X.aligned() +print X.score() +print R +print S diff --git a/lcs.py b/lcs.py new file mode 100644 index 0000000..33dc8bb --- /dev/null +++ b/lcs.py @@ -0,0 +1,99 @@ +from fasta import readFASTA +import numpy as np +import string +import operator as op +# The key to this algorithm is that the LCS of A[0..n] and B[0..m] +# can be computed from the LCS of A[0..(n-1)] and B[0..(m-1)] +# if A[n]==B[m] then the LCS of A[0..n] and B[0..m] is the LCS +# of A[0..(n-1)] and B[0..(m-1)] with A[n] (B[m]) appended -- then length +# goes up by one. If A[n]!=B[m] then the LCS of the two is the longer +# the lcs of A[0..(n-1)],B[m] and A[0..n] and B[0..(m-1)]. +# note that this algorithm is very close to Needleman-Wunsch and Smith-Waterman, +# just the scoring part is different. + + +s=readFASTA("rosalind_lcsq.txt") + +A=s.values()[0] +B=s.values()[1] + +#A='AACCTTGG' +#B='ACACTGTGA' +nA=len(A) +nB = len(B) + + +dp=np.zeros((nB,nA)) +pointerx=np.zeros((nB,nA),dtype=int) +pointery=np.zeros((nB,nA),dtype=int) +savedp=0 +savedi=0 +savedj=0 + +if A[0]==B[0]: + dp[0][0]=1 + +for i in range(1,nA): + pointerx[0][i]=-1 + if B[0]==A[i]: + dp[0][i]=1 + savedi=i + savedp=1 + pointerx[0][i]=-1 + pointery[0][i]=-1 + else: + dp[0][i]=dp[0][i-1] + pointerx[0][i]=-1 + +for j in range(1,nB): + pointery[j][0]=-1 + if B[j]==A[0]: + dp[j][0]=1 + savedj=j + savedp=1 + pointerx[j][0]=-1 + pointery[j][0]=-1 + else: + dp[j][0]=dp[j-1][0] + pointery[j][0]=-1 + +for i in range(1,nA): + for j in range(1,nB): + if A[i]==B[j]: + dp[j][i]=dp[j-1][i-1]+1 + (dx,dy)=(-1,-1) + else: + t=[(dp[j-1][i],(-1,0)),(dp[j][i-1],(0,-1))] + (t,(dx,dy))=max(t,key=lambda x: op.getitem(x,0)) + dp[j][i]=dp[j+dx][i+dy] + pointerx[j][i],pointery[j][i]=dx,dy + if dp[j][i]>savedp: + savedp=dp[j][i] + savedi,savedj=i,j + + +answer=[] +i,j = savedi,savedj +while True: +## print i,j,pointerx[j][i],pointery[j][i],dp[j][i] + if pointerx[j][i]==pointery[j][i] and pointerx[j][i]==-1: + answer.append(A[i]) + i,j=i+pointery[j][i],j+pointerx[j][i] + if i<0 or j<0: + break + +print ''.join(reversed(answer)) + +##### This version came from the Rosalind Web Site +##### it preserves only the last row of the table, and the +##### current row; but it has to keep the corresponding longest subsequences + + +#S, T = open('rosalind_lcsq.txt').read().splitlines() +#cur = [''] * (len(T) + 1) #dummy entries as per wiki +#for s in A: +# last, cur = cur, [''] +# for i, t in enumerate(B): +# cur.append(last[i] + s if s==t else max(last[i+1], cur[-1], key=len)) +#print cur[-1] + diff --git a/lexi.py b/lexi.py new file mode 100755 index 0000000..c82804b --- /dev/null +++ b/lexi.py @@ -0,0 +1,14 @@ +#!/usr/bin/python + +def lexi(alphabet,z): + if z>0: + for t in alphabet: + yield t + for x in lexi(alphabet,z-1): + yield t+x + + + +for x in lexi(['P','D','E','W','H','Y','V','O','J','U','R','Q'],4): + print x + diff --git a/ling.py b/ling.py new file mode 100644 index 0000000..7cfb681 --- /dev/null +++ b/ling.py @@ -0,0 +1,24 @@ +from suffix import * +from math import log +with open("rosalind_ling.txt","rU") as f: + s=f.readline().strip() + +#s='ATTTGGATT' +n=SuffixTree(s) +p=0 +b=0 +for x in n.edges.values(): + p=p+x.length+1 + +k=int(log(len(s))/log(4)) +for y in xrange(1,k+1): + print 4**y + b=b+4**y + +for y in xrange(k+1,len(s)+1): + print len(s)+1-y + b=b+len(s)+1-y + +print p,b +print float(p)/float(b) + \ No newline at end of file diff --git a/local_align.py b/local_align.py new file mode 100644 index 0000000..bc047a5 --- /dev/null +++ b/local_align.py @@ -0,0 +1,33 @@ +from fasta import readFASTA +from scores import * +import numpy as np +import cython_local_align + +s=readFASTA("rosalind_smgb.txt") + +def pam250_penalty(x,y): + return -pam250_score(x,y) + +def blosum62_penalty(x,y): + return -blosum62_score(x,y) + +def edit_distance(x,y): + if x==y: + return -1 + else: + return 1 + +def lgap(j): + return j + +def agap(j): + return 10+j + + +A=s.values()[0] +B=s.values()[1] + + +cython_local_align.build_dp_array(A,B,0,1,edit_distance) + + diff --git a/longest_common_binary.py b/longest_common_binary.py new file mode 100644 index 0000000..8bf21c7 --- /dev/null +++ b/longest_common_binary.py @@ -0,0 +1,30 @@ +def substr_in_all(arr, part): + for dna in arr: + if dna.find(part)==-1: + return False + return True + +def common_substr(arr, l): + first = arr[0] + for i in range(len(first)-l+1): + part = first[i:i+l] + if substr_in_all(arr, part): + return part + return "" + +def longest_common_substr(arr): + l = 0; r = len(arr[0]) + + while l+1 self.last_char_index + + def implicit(self): + return self.last_char_index >= self.first_char_index + + +class SuffixTree(object): + """A suffix tree for string matching. Uses Ukkonen's algorithm + for construction. + """ + def __init__(self, string, case_insensitive=False,sep_chars=[]): + """ + string + the string for which to construct a suffix tree + """ + self.string = string + self.sep_chars=sep_chars + self.case_insensitive = case_insensitive + self.N = len(string) - 1 + self.nodes = [Node()] + self.edges = {} + self.alphabet={} + self.active = Suffix(0, 0, -1,0) + if self.case_insensitive: + self.string = self.string.lower() + for i in range(len(string)): + self._add_prefix(i) + self._add_to_alphabet(self.string[i]) + + + + + def __repr__(self): + """ + Lists edges in the suffix tree + """ + s="" + for x in self.alphabet.keys(): + s+=x + curr_index = self.N + s = "\tLabel \tStart \tEnd \tDepth \tSuf \tParent \tFirst \tLast \tString\n" + values = self.edges.values() + values.sort(key=lambda x: (self.nodes[x.dest_node_index].label,self.nodes[x.source_node_index])) + for edge in values: + if edge.source_node_index == -1: + continue + s += "\t%s \t%s \t%s \t%s \t%s \t%s \t%s \t%s \t"%(self.nodes[edge.dest_node_index].label, edge.source_node_index + ,edge.dest_node_index ,self.nodes[edge.dest_node_index].depth + ,self.nodes[edge.dest_node_index].suffix_node, self.nodes[edge.dest_node_index].parent + ,edge.first_char_index + ,edge.last_char_index) + + + top = min(curr_index, edge.last_char_index) + s += self.string[edge.first_char_index:top+1] + "\n" + return s + + def _add_to_alphabet(self,char): + self.alphabet[char]=1 + + def _add_prefix(self, last_char_index): + """The core construction method. + """ + last_parent_node = -1 + + while True: + # the current phase of the algorithm is given by last_char_index + # the current suffix being inserted is given by the path from the root to self.active.source_node_index + # followed by the string from self.active.first_char_index to the last_char_index in self.string + # So it is of the form (A)(string[self.active.first_char_index..self.active.last_char_index])(self.string[last_char_index]) [***] + # and the path (A) ends at the node self.active.source_node_index + + # any splits will occur in an edge from self.active.source_node_index + # we need to remember this node for the purposes of creating suffix links + + + parent_node = self.active.source_node_index + + if self.active.explicit(): + # active is at a node (meaning that the middle piece of the form [***] is missing + if (self.active.source_node_index, self.string[last_char_index]) in self.edges: + # Rule 3 (do nothing): edge leaving source_node_index is marked with the last character of active suffix + # prefix is already in tree + break + else: + # active is in the middle of an edge from source node in the direction of active.first_char_index + e = self.edges[self.active.source_node_index, self.string[self.active.first_char_index]] + if self.string[e.first_char_index + self.active.length + 1] == self.string[last_char_index]: + # Rule 3 (do nothing): suffix lies in middle of an edge + # prefix is already in tree + break + + # Rule 2 in the middle of an edge, we know that at least one path continues, we must split edge + + # Also, this new internal node will have a suffix link to it from "last_parent_node" + # assuming last parent node isn't the root (this happens a bit later) + + parent_node = self._split_edge(e, self.active) + + # either active is at a node, but there is no edge marked with the last character of active suffix + # OR we're in Rule 2, we just split the edge, and parent_node is now the new node + # we add the new leaf node in either case (Rule 2) + + + self.nodes.append(Node(self.active.ext)) + e = Edge(last_char_index, self.N, parent_node, len(self.nodes) - 1) + self.nodes[len(self.nodes)-1].parent=(parent_node,self.string[e.first_char_index]) + self._insert_edge(e) + + # here's where we put in the suffix link to the parent of the newly created node + # from the previous parent + + if last_parent_node > 0: + self.nodes[last_parent_node].suffix_node = parent_node + + # Remember the parent for future suffix links + + last_parent_node = parent_node + + # if the active node is the root, then the next prefix to consider is obtained by just incrementing + # the first_char_index; otherwise, the next prefix to consider is obtained by following a suffix + # link. Suppose the suffix link goes from v to s(v). Write the path to v in the form XA with X a single character and A a string + # then the path to the node s(v) is A. In other words, either way (i.e. from the root or via a suffix link) + # we have moved to the next extension in this phase. + + if self.active.source_node_index == 0: + self.active.ext+=1 + self.active.first_char_index += 1 + else: + self.active.ext+=1 + self.active.source_node_index = self.nodes[self.active.source_node_index].suffix_node + + + # traverse the tree along the active suffix, sucking up edges until the either + # the suffix becomes explicit or the end of the prefix lies in the middle of an edge + # leaving the active node + + self._canonize_suffix(self.active) + + # we get here after a "Rule 3" situation, meaning that all of "suffix" is + # implicitly in the tree. We have to finish up by creating the last suffix link + # and moving down the tree so the end of the suffix lies within an edge leaving + # the active node. + + if last_parent_node > 0: + self.nodes[last_parent_node].suffix_node = parent_node + self.active.last_char_index += 1 + self._canonize_suffix(self.active) + + def _insert_edge(self, edge): + self.edges[(edge.source_node_index, self.string[edge.first_char_index])] = edge + self.nodes[edge.dest_node_index].depth=self.nodes[edge.source_node_index].depth+edge.length+1 + + def _remove_edge(self, edge): + self.edges.pop((edge.source_node_index, self.string[edge.first_char_index])) + + def _split_edge(self, edge, suffix): + self.nodes.append(Node(-1)) + e = Edge(edge.first_char_index, edge.first_char_index + suffix.length, suffix.source_node_index, len(self.nodes) - 1) + self.nodes[len(self.nodes)-1].parent=(suffix.source_node_index,self.string[e.first_char_index]) + self._remove_edge(edge) + self._insert_edge(e) + self.nodes[e.dest_node_index].suffix_node = suffix.source_node_index ### need to add node for each edge + + edge.first_char_index += suffix.length + 1 + self.nodes[edge.dest_node_index].parent=(len(self.nodes)-1,self.string[edge.first_char_index]) + edge.source_node_index = e.dest_node_index + self._insert_edge(edge) + return e.dest_node_index + + def _canonize_suffix(self, suffix): + """This canonizes the suffix, walking along its suffix string until it + is explicit or there are no more matched nodes. + """ + if not suffix.explicit(): + e = self.edges[suffix.source_node_index, self.string[suffix.first_char_index]] + if e.length <= suffix.length: + suffix.first_char_index += e.length + 1 + suffix.source_node_index = e.dest_node_index + self._canonize_suffix(suffix) + + + # Public methods + def find_substring(self, substring,nodelist=[]): + """Returns the index of substring in string or -1 if it + is not found. + """ + if not substring: + return -1 + if self.case_insensitive: + substring = substring.lower() + curr_node = 0 + i = 0 + while i < len(substring): + edge = self.edges.get((curr_node, substring[i])) + if not edge: + return -1 + ln = min(edge.length + 1, len(substring) - i) + if substring[i:i + ln] != self.string[edge.first_char_index:edge.first_char_index + ln]: + return -1 + i += edge.length + 1 + curr_node = edge.dest_node_index + return self.count_leaves_below(curr_node,nodelist) + + + def count_leaves_below(self,node,nodelist): + j=0 ; n=1 + for x in self.alphabet.keys(): + e=self.edges.get((node,x)) + if e: + j+=self.count_leaves_below(e.dest_node_index,nodelist) + n=0 + if n==1: + nodelist.append(self.nodes[node].label) + return max(n,j) + + + def common_substring_nodes(self,curr_node=0,answers=[]): + n=1; l={} + for x in self.alphabet.keys(): + e=self.edges.get((curr_node,x)) + if e: + l.update(self.common_substring_nodes(e.dest_node_index,answers)) + n=0 + if n==1: + for t in self.sep_chars: + if t in self.string[self.nodes[curr_node].label:]: + l[t]=1 + break + if len(l.keys())==len(self.sep_chars): + answers.append(curr_node) + return l + + + def prefix_of_node(self,curr_node): + prefix='' + while True: + n=self.nodes[curr_node].parent + e=self.edges.get(n) + if e: + prefix=self.string[e.first_char_index:e.last_char_index+1]+prefix + curr_node=e.source_node_index + else: + break + return prefix + + def has_substring(self, substring): + return self.find_substring(substring) != -1 + + + +value,key,s="","",{} + +with open("datafile.txt","rU") as f: + for x in f: + if x[0]!=">": + value=value+x.strip() + else: + if key!="": s[key]=value + key=x[1:].strip() + value="" + +big_string='' +j=0 +sepchars=[] + + + + +for x in s.values(): + big_string+=x + big_string+=str(len(sepchars)) + sepchars.append(str(len(sepchars))) + if len(sepchars)==10: + n=SuffixTree(big_string,case_insensitive=True,sep_chars=sepchars) + a=[] + n.common_substring_nodes(answers=a) + a.sort(key=lambda x: -(n.nodes[x].depth)) + b=n.prefix_of_node(a[0]) + print b.upper() + bigstring="" + sepchars=[] + +if len(sepchars)>0: + n=SuffixTree(big_string,case_insensitive=True,sep_chars=sepchars) + a=[] + n.common_substring_nodes(answers=a) + a.sort(key=lambda x: -(n.nodes[x].depth)) + b=n.prefix_of_node(a[0]) + print b.upper() + + diff --git a/lrep.py b/lrep.py new file mode 100644 index 0000000..a18c4f2 --- /dev/null +++ b/lrep.py @@ -0,0 +1,44 @@ +from collections import defaultdict +import operator + +tree=defaultdict(list) +rtree=defaultdict(list) +loc=dict() +sublen=dict() +subcnt=defaultdict(int) +tlen=defaultdict(int) + +with open("rosalind_lrep.txt","rU") as f: + base=f.readline().strip() + n=int(f.readline().strip()) + for line in f: + s=line.split() + tree[s[0]].append(s[1]) + rtree[s[1]]=s[0] + loc[s[1]]=int(s[2]) + sublen[s[1]]=int(s[3]) + +def count_substrings(s): + if len(tree[s])==0: + subcnt[s]=1 + else: + for t in tree[s]: + count_substrings(t) + subcnt[s]+=subcnt[t] + +def substring_len(s): + for x in tree[s]: + tlen[x]=sublen[x]+tlen[s] + substring_len(x) + +count_substrings('node1') +substring_len('node1') + +L=sorted([(x,subcnt[x],tlen[x]) for x in tree.keys() if subcnt[x]>=n],key=operator.itemgetter(2),reverse=True) +y=L[0][0] +s='' +while y in rtree: + s=base[loc[y]-1:loc[y]+sublen[y]-1]+s + y=rtree[y] +print s + diff --git a/markov.py b/markov.py new file mode 100644 index 0000000..5063926 --- /dev/null +++ b/markov.py @@ -0,0 +1,25 @@ +#this illustrates a simple two state markov chain +#that begins all zeroes and then has transition probabilities +# of 1% in each slot; the curve shows the expected number of +# 1's in the sequence +# it's a crude model of the 4-state JC picture of evolution + +import numpy as np +import matplotlib.pyplot as plt + +N=3000 + +for trials in range(1): + d=np.zeros(N) + x=np.zeros(1000) + for i in range(N): + for j in range(len(x)): + z=np.random.randint(0,100) + if z==99: + x[j]=1-x[j] + d[i]=sum(x)/1000 + plt.plot(range(N),d) +beta=-.5*np.log(1-.02) +alpha=.5-.5*np.exp(-2*np.arange(N)*beta) +plt.plot(range(N),alpha) +plt.show() \ No newline at end of file diff --git a/mend.py b/mend.py new file mode 100644 index 0000000..5c639bf --- /dev/null +++ b/mend.py @@ -0,0 +1,32 @@ +from nwck_class_rooted import Newick_Tree_Rooted + +class Pedigree(Newick_Tree_Rooted): + def __init__(self,s,flag=1): + Newick_Tree_Rooted.__init__(self,s) + self.flag=flag + +popdict={'AA':[1,0,0],'Aa':[0,1,0],'aa':[0,0,1]} +pops={} + + +with open("rosalind_mend.txt","rU") as f: + s=f.read().strip() + +T=Pedigree(s) + +def population(T,node): + new=[0,0,0] + if len(T.dtree[node])==0: + pops[node]=popdict[T.label_name[node]] + else: + population(T,T.dtree[node][0]) + population(T,T.dtree[node][1]) + left=pops[T.dtree[node][0]] + right=pops[T.dtree[node][1]] + new[0]=left[0]*right[0]+0.5*(left[0]*right[1]+right[0]*left[1])+0.25*left[1]*right[1] + new[1]=0.5*(left[0]*right[1]+right[0]*left[1])+0.5*left[1]*right[1]+0.5*(left[1]*right[2]+right[1]*left[2])+(left[0]*right[2]+left[2]*right[0]) + new[2]=left[2]*right[2]+0.5*(left[1]*right[2]+right[1]*left[2])+0.25*left[1]*right[1] + pops[node]=new + +population(T,T.root) + \ No newline at end of file diff --git a/mendel.py b/mendel.py new file mode 100644 index 0000000..073b405 --- /dev/null +++ b/mendel.py @@ -0,0 +1,9 @@ +t=15.0 #aa +n=16.0 #Aa +m=24.0 #AA + +num=(4*t*(t-1)/2+n*(n-1)/2+2*n*t) +denom=2*(m+n+t)*(m+n+t-1) + +rate = 1-num/denom +print rate diff --git a/mgap.py b/mgap.py new file mode 100644 index 0000000..64d2735 --- /dev/null +++ b/mgap.py @@ -0,0 +1,99 @@ +from fasta import readFASTA +import numpy as np +import string +import operator as op +# The key to this algorithm is that the LCS of A[0..n] and B[0..m] +# can be computed from the LCS of A[0..(n-1)] and B[0..(m-1)] +# if A[n]==B[m] then the LCS of A[0..n] and B[0..m] is the LCS +# of A[0..(n-1)] and B[0..(m-1)] with A[n] (B[m]) appended -- then length +# goes up by one. If A[n]!=B[m] then the LCS of the two is the longer +# the lcs of A[0..(n-1)],B[m] and A[0..n] and B[0..(m-1)]. +# note that this algorithm is very close to Needleman-Wunsch and Smith-Waterman, +# just the scoring part is different. + + +s=readFASTA("rosalind_mgap.txt") + +A=s.values()[0] +B=s.values()[1] + +#A='AACCTTGG' +#B='ACACTGTGA' +nA=len(A) +nB = len(B) + + +dp=np.zeros((nB,nA)) +pointerx=np.zeros((nB,nA),dtype=int) +pointery=np.zeros((nB,nA),dtype=int) +savedp=0 +savedi=0 +savedj=0 + +if A[0]==B[0]: + dp[0,0]=1 + +for i in range(1,nA): + pointerx[0,i]=-1 + if B[0]==A[i]: + dp[0,i]=1 + savedi=i + savedp=1 + pointerx[0,i]=-1 + pointery[0,i]=-1 + else: + dp[0,i]=dp[0,i-1] + pointerx[0,i]=-1 + +for j in range(1,nB): + pointery[j,0]=-1 + if B[j]==A[0]: + dp[j,0]=1 + savedj=j + savedp=1 + pointerx[j,0]=-1 + pointery[j,0]=-1 + else: + dp[j,0]=dp[j-1,0] + pointery[j,0]=-1 + +for i in range(1,nA): + for j in range(1,nB): + if A[i]==B[j]: + dp[j,i]=dp[j-1,i-1]+1 + (dx,dy)=(-1,-1) + else: + t=[(dp[j-1,i],(-1,0)),(dp[j,i-1],(0,-1))] + (t,(dx,dy))=max(t,key=lambda x: op.getitem(x,0)) + dp[j,i]=dp[j+dx,i+dy] + pointerx[j,i],pointery[j,i]=dx,dy + if dp[j,i]>savedp: + savedp=dp[j,i] + savedi,savedj=i,j + + +answer=[] +i,j = savedi,savedj +while True: +## print i,j,pointerx[j,i],pointery[j,i],dp[j,i] + if pointerx[j,i]==pointery[j,i] and pointerx[j,i]==-1: + answer.append(A[i]) + i,j=i+pointery[j,i],j+pointerx[j,i] + if i<0 or j<0: + break + +print ''.join(reversed(answer)) +print len(A)+len(B)-2*len(answer) +##### This version came from the Rosalind Web Site +##### it preserves only the last row of the table, and the +##### current row; but it has to keep the corresponding longest subsequences + + +#S, T = open('rosalind_lcsq.txt').read().splitlines() +#cur = [''] * (len(T) + 1) #dummy entries as per wiki +#for s in A: +# last, cur = cur, [''] +# for i, t in enumerate(B): +# cur.append(last[i] + s if s==t else max(last[i+1], cur[-1], key=len)) +#print cur[-1] + diff --git a/motif.py b/motif.py new file mode 100644 index 0000000..c54dd6f --- /dev/null +++ b/motif.py @@ -0,0 +1,25 @@ +import urllib,re,sys,contextlib + +base_url="http://www.uniprot.org/uniprot/" + +for protein in sys.stdin: + outstring,sequence="","" + with contextlib.closing(urllib.urlopen(base_url+protein[:6]+".fasta")) as f: + f.readline() + for x in f: + sequence=sequence+x.strip() + m=re.finditer('(?=(N[^P][ST][^P]))',sequence) + for r in m: + start,end=r.span() + outstring+=str(start+1) + outstring+=' ' + if len(outstring)>0: + print "%s%s" %(protein,outstring) + + + + + + + + diff --git a/mrep.py b/mrep.py new file mode 100644 index 0000000..65397fb --- /dev/null +++ b/mrep.py @@ -0,0 +1,89 @@ +from collections import defaultdict +from sys import setrecursionlimit, stdout +setrecursionlimit(1500) +#trie=defaultdict(list) +##labels={} +#Node=0 +#Next=1 +data=[] +with open("rosalind_mrep.txt","rU") as f: + line=f.readline().strip() +line=line+'$' +#line='TAGAGATAGAATGGGTCCAGAGTTTTGTAATTTCCATGGGTCCAGAGTTTTGTAATTTATTATATAGAGATAGAATGGGTCCAGAGTTTTGTAATTTCCATGGGTCCAGAGTTTTGTAATTTAT$' +line=line[:-1][::-1]+'$' + +#line='ATGATC$' +for i in range(len(line)): + data.append(line[i:]) + + +#for x in data: +## Node=0 +## for y in x: +# s=[labels[i] for i in trie[Node]] +# if y in s: +# Node=trie[Node][s.index(y)] +# else: +# trie[Node].append(Next) +# labels[Next]=y +# Node,Next=Next,Next+1 + +def build_trie(data): + trie=defaultdict(list) + labels={} + Node,Next=0,1 + for x in data: + Node=0 + for y in x: + s=[labels[i] for i in trie[Node]] + #print y,Node,Next + if y in s: + Node=trie[Node][s.index(y)] + else: + trie[Node].append(Next) + labels[Next]=y + Node,Next=Next,Next+1 + return trie,labels + +trie,labels=build_trie(data) +repeats={} +def repeat_cnt(trie,Node): + repeats[Node]=0 + if len(trie[Node])==0: + repeats[Node]=1 + return + else: + for y in trie[Node]: + repeat_cnt(trie,y) + repeats[Node]+=repeats[y] + return + + + + +f=stdout +for x in trie[0]: + repeat_cnt(trie,x) + + +def strings(trie,node,s): + #print node,s + if len(trie[node])>1: + if len(s)>=20 and repeats[node]>=2: + f.write(s+labels[node]+' '+str(repeats[node])+'\n') + answer.append(s+labels[node]) + + for n in trie[node]: + strings(trie,n,s+labels[node]) + return + if len(trie[node])==0: + #if(len(s))>=20: + # f.write(s+'$\n') + return + +answer=[] + +for x in trie[0]: + strings(trie,x,'') + +#f.close() \ No newline at end of file diff --git a/my_iterators.py b/my_iterators.py new file mode 100644 index 0000000..46b575a --- /dev/null +++ b/my_iterators.py @@ -0,0 +1,48 @@ +class Tree: + def __init__(self,taxa): + self.taxa=taxa[1:] + self.root=taxa[0] + self.I=self.trees(self.taxa) + + + + def __iter__(self): + return self + + def next(self): + return '(%s)%s;'%(self.lists_to_newick(self.I.next()),self.root) + + + def lists_to_newick(self,g): + if type(g)==str: + return g + else: + s='' + for x in g: + s+=self.lists_to_newick(x) + s+=',' + return '(%s)'%(s[:-1]) + + + def LR(self,x): + n=2**(len(x)-1) + for i in xrange(1,n): + L,R=[],[] + for j in xrange(len(x)): + if i%2==0: + L.append(x[j]) + else: + R.append(x[j]) + i=i/2 + yield L,R + + def trees(self,z): + if len(z)==2: + yield [z[0],z[1]] + elif len(z)==1: + yield z[0] + else: + for (L,R) in self.LR(z): + for left_subtree in self.trees(L): + for right_subtree in self.trees(R): + yield [left_subtree,right_subtree] \ No newline at end of file diff --git a/newfasta.py b/newfasta.py new file mode 100644 index 0000000..757acc0 --- /dev/null +++ b/newfasta.py @@ -0,0 +1,17 @@ +#!/usr/bin/python +from collections import OrderedDict + +def readFASTA(name): + value,key="","" + s=OrderedDict({}) + with open(name,"rU") as f: + if x[0]!=">": + value=value+x.strip() + else: + if key!="": + s[key]=value + key=x[1:].strip() + value="" + s[key]=value + return(s) + diff --git a/nwck.py b/nwck.py new file mode 100644 index 0000000..edf9ed8 --- /dev/null +++ b/nwck.py @@ -0,0 +1,180 @@ + +import numpy as np +def tokens(s): + cursor=0 + n='' + while cursor0: + yield 'LABEL',n.strip() + +def build_tree2(s): + tree,labels,weights={},{},{} + taxa=[] + parent,curnode,savenode=-1,0,0 + new_node=1 + tree[0]=-1 #introduce an artificial root note + prior_kind=None + for (kind,value) in tokens(s): + if kind=='OPEN_PAREN': + parent=curnode + curnode=new_node + tree[curnode]=parent + new_node=new_node+1 + prior_kind=kind + continue + if kind=='LABEL': + if prior_kind=='CLOSE_PAREN': + labels[value]=savenode + elif prior_kind=='COLON': + weights[savenode]=int(value) + else: + labels[value]=new_node + tree[new_node]=curnode + savenode=new_node # needed if this label is followed by colon + taxa.append(value) + new_node+=1 + prior_kind=kind + continue + + if kind=='COLON': + if prior_kind=='COMMA' or prior_kind=='OPEN_PAREN': + tree[new_node]=curnode + #savenode=new_node + new_node+=1 + prior_kind=kind + continue + + if kind=='CLOSE_PAREN': + if prior_kind=='COMMA': + tree[new_node]=curnode + new_node+=1 + savenode=curnode + curnode=parent + parent=tree[curnode] + prior_kind=kind + continue + if kind=='COMMA': + if prior_kind=='COMMA': + tree[new_node]=curnode + new_node+=1 + prior_kind=kind + continue + + if parent!=-1: + raise Exception('ParseError') + else: + return tree,labels,weights,taxa + + +def path_to_root(x,tree,labels): + start_node=labels[x] + path=[start_node] + parent=tree[start_node] + while parent!=-1: + path.append(parent) + parent=tree[parent] + return path + + +def tree_distance(x,y,tree,labels,weights): + xnode=labels[x] + ynode=labels[y] + d=0 + while True: + if xnodeynode: + front.append(xnode) + xnode=tree[xnode] + elif ynode==xnode: + back.insert(0,ynode) + front.extend(back) + return front + +def separates(a,x,y,tree,labels,weights): + b=tree[a] + xnode=labels[x] + ynode=labels[y] + front=[] + back=[] + has_a,has_b=False,False + while True: + if xnode==a or ynode==a: + has_a=True + if ynode==b or xnode==b: + has_b=True + if xnodeynode: + front.append(xnode) + xnode=tree[xnode] + elif ynode==xnode: + back.insert(0,ynode) + front.extend(back) + return (has_a and has_b) + + +f=open('rosalind_ctbl.txt','rU') +s=f.readline() +f.close() +(tree,labels,weights,taxa)=build_tree2(s) + +parents=np.unique(tree.values()) +base=taxa[0] +f=open('chartable.txt','w') +row='' +for x in parents: + if x<1: + continue + for t in sorted(taxa): + row+=str(int(separates(x,base,t,tree,labels,weights))) + row+='\n' + +f.write(row) +f.close() + + + + + + \ No newline at end of file diff --git a/nwck_class-2.py b/nwck_class-2.py new file mode 100644 index 0000000..2f7446a --- /dev/null +++ b/nwck_class-2.py @@ -0,0 +1,198 @@ +import numpy as np + +class Newick_Tree: + def __init__(self,s): + (self.tree,self.labels,self.weights,self.taxa)=self.build_tree2(s) + self.parents=np.unique(self.tree.values()) + self.string=s + self.character_table=self.build_characters(self) + + + def tokens(self,s): + cursor=0 + n='' + while cursor0: + yield 'LABEL',n.strip() + + def build_tree2(self,s): + tree,labels,weights={},{},{} + taxa=[] + parent,curnode,savenode=-1,0,0 + new_node=1 + tree[0]=-1 #introduce an artificial root note + prior_kind=None + for (kind,value) in self.tokens(s): + if kind=='OPEN_PAREN': + parent=curnode + curnode=new_node + tree[curnode]=parent + new_node=new_node+1 + prior_kind=kind + continue + if kind=='LABEL': + if prior_kind=='CLOSE_PAREN': + labels[value]=savenode + elif prior_kind=='COLON': + weights[savenode]=int(value) + else: + labels[value]=new_node + tree[new_node]=curnode + savenode=new_node # needed if this label is followed by colon + taxa.append(value) + new_node+=1 + prior_kind=kind + continue + + if kind=='COLON': + if prior_kind=='COMMA' or prior_kind=='OPEN_PAREN': + tree[new_node]=curnode + #savenode=new_node + new_node+=1 + prior_kind=kind + continue + + if kind=='CLOSE_PAREN': + if prior_kind=='COMMA': + tree[new_node]=curnode + new_node+=1 + savenode=curnode + curnode=parent + parent=tree[curnode] + prior_kind=kind + continue + if kind=='COMMA': + if prior_kind=='COMMA': + tree[new_node]=curnode + new_node+=1 + prior_kind=kind + continue + + if parent!=-1: + raise Exception('ParseError') + else: + return tree,labels,weights,taxa + + + def path_to_root(self,x): + tree=self.tree + start_node=labels[x] + path=[start_node] + parent=tree[start_node] + while parent!=-1: + path.append(parent) + parent=tree[parent] + return path + + def common_ancestor(self,x,y): + tree,labels,weights=self.tree,self.labels,self.weights + xnode=labels[x] + ynode=labels[y] + d=0 + while True: + if xnodeynode: + front.append(xnode) + xnode=tree[xnode] + elif ynode==xnode: + back.insert(0,ynode) + front.extend(back) + return front + + def separates(self,a,x,y): + tree,labels,weights=self.tree,self.labels,self.weights + b=tree[a] + xnode=labels[x] + ynode=labels[y] + front=[] + back=[] + has_a,has_b=False,False + while True: + if xnode==a or ynode==a: + has_a=True + if ynode==b or xnode==b: + has_b=True + if xnodeynode: + front.append(xnode) + xnode=tree[xnode] + elif ynode==xnode: + back.insert(0,ynode) + front.extend(back) + return (has_a and has_b) + + def build_characters(self): + table=np.zeros((len(self.taxa)-3,len(self.taxa))) + root=self.taxa[0] + for i,t in enumerate(self.taxa): + for edge in self.path(root,t): + table[edge,i]=1 + + + + + + + + + + + \ No newline at end of file diff --git a/nwck_class.py b/nwck_class.py new file mode 100644 index 0000000..bb19596 --- /dev/null +++ b/nwck_class.py @@ -0,0 +1,205 @@ +import numpy as np + +class Newick_Tree: + def __init__(self,s): + (self.tree,self.labels,self.weights,self.taxa)=self.build_tree2(s) + self.parents=np.unique(self.tree.values()) + self.string=s + + def tokens(self,s): + cursor=0 + n='' + while cursor0: + yield 'LABEL',n.strip() + + def build_tree2(self,s): + tree,labels,weights={},{},{} + taxa=[] + parent,curnode,savenode=-1,0,0 + new_node=1 + tree[0]=-1 #introduce an artificial root note + prior_kind=None + for (kind,value) in self.tokens(s): + if kind=='OPEN_PAREN': + parent=curnode + curnode=new_node + tree[curnode]=parent + new_node=new_node+1 + prior_kind=kind + continue + if kind=='LABEL': + if prior_kind=='CLOSE_PAREN': + labels[value]=savenode + elif prior_kind=='COLON': + weights[savenode]=int(value) + else: + labels[value]=new_node + tree[new_node]=curnode + savenode=new_node # needed if this label is followed by colon + taxa.append(value) + new_node+=1 + prior_kind=kind + continue + + if kind=='COLON': + if prior_kind=='COMMA' or prior_kind=='OPEN_PAREN': + tree[new_node]=curnode + #savenode=new_node + new_node+=1 + prior_kind=kind + continue + + if kind=='CLOSE_PAREN': + if prior_kind=='COMMA': + tree[new_node]=curnode + new_node+=1 + savenode=curnode + curnode=parent + parent=tree[curnode] + prior_kind=kind + continue + if kind=='COMMA': + if prior_kind=='COMMA': + tree[new_node]=curnode + new_node+=1 + prior_kind=kind + continue + + if parent!=-1: + raise Exception('ParseError') + else: + return tree,labels,weights,taxa + + + def path_to_root(self,x): + tree=self.tree + start_node=labels[x] + path=[start_node] + parent=tree[start_node] + while parent!=-1: + path.append(parent) + parent=tree[parent] + return path + + def common_ancestor(self,x,y): + tree,labels,weights=self.tree,self.labels,self.weights + xnode=labels[x] + ynode=labels[y] + d=0 + while True: + if xnodeynode: + front.append(xnode) + xnode=tree[xnode] + elif ynode==xnode: + back.insert(0,ynode) + front.extend(back) + return front + + def separates(self,a,x,y): + tree,labels,weights=self.tree,self.labels,self.weights + b=tree[a] + xnode=labels[x] + ynode=labels[y] + front=[] + back=[] + has_a,has_b=False,False + while True: + if xnode==a or ynode==a: + has_a=True + if ynode==b or xnode==b: + has_b=True + if xnodeynode: + front.append(xnode) + xnode=tree[xnode] + elif ynode==xnode: + back.insert(0,ynode) + front.extend(back) + return (has_a and has_b) + + + + +f=open('rosalind_ctbl.txt','rU') +s=f.readline() +f.close() +T=Newick_Tree(s) + +base=T.taxa[0] +f=open('chartable.txt','w') +row='' +for x in T.parents: + if x<1: + continue + for t in sorted(T.taxa): + row+=str(int(T.separates(x,base,t))) + row+='\n' + +f.write(row) +f.close() + + + + + + \ No newline at end of file diff --git a/nwck_class_2.py b/nwck_class_2.py new file mode 100644 index 0000000..987ff50 --- /dev/null +++ b/nwck_class_2.py @@ -0,0 +1,205 @@ +import numpy as np + +class Newick_Tree: + def __init__(self,s): + (self.tree,self.labels,self.weights,self.taxa)=self.build_tree2(s) + self.parents=np.unique(self.tree.values()) + self.string=s + + + def tokens(self,s): + cursor=0 + n='' + while cursor0: + yield 'LABEL',n.strip() + + def build_tree2(self,s): + tree,labels,weights={},{},{} + taxa=[] + parent,curnode,savenode=-1,0,0 + new_node=1 + tree[0]=-1 #introduce an artificial root note + prior_kind=None + for (kind,value) in self.tokens(s): + if kind=='OPEN_PAREN': + parent=curnode + curnode=new_node + tree[curnode]=parent + new_node=new_node+1 + prior_kind=kind + continue + if kind=='LABEL': + if prior_kind=='CLOSE_PAREN': + labels[value]=savenode + elif prior_kind=='COLON': + weights[savenode]=int(value) + else: + labels[value]=new_node + tree[new_node]=curnode + savenode=new_node # needed if this label is followed by colon + taxa.append(value) + new_node+=1 + prior_kind=kind + continue + + if kind=='COLON': + if prior_kind=='COMMA' or prior_kind=='OPEN_PAREN': + tree[new_node]=curnode + #savenode=new_node + new_node+=1 + prior_kind=kind + continue + + if kind=='CLOSE_PAREN': + if prior_kind=='COMMA': + tree[new_node]=curnode + new_node+=1 + savenode=curnode + curnode=parent + parent=tree[curnode] + prior_kind=kind + continue + if kind=='COMMA': + if prior_kind=='COMMA': + tree[new_node]=curnode + new_node+=1 + prior_kind=kind + continue + + if parent!=-1: + raise Exception('ParseError') + else: + return tree,labels,weights,taxa + + + def path_to_root(self,x): + tree=self.tree + start_node=labels[x] + path=[start_node] + parent=tree[start_node] + while parent!=-1: + path.append(parent) + parent=tree[parent] + return path + + def common_ancestor(self,x,y): + tree,labels,weights=self.tree,self.labels,self.weights + xnode=labels[x] + ynode=labels[y] + d=0 + while True: + if xnodeynode: + front.append(xnode) + xnode=tree[xnode] + elif ynode==xnode: + back.insert(0,ynode) + front.extend(back) + return front + + def separates(self,a,x,y): + tree,labels,weights=self.tree,self.labels,self.weights + b=tree[a] + xnode=labels[x] + ynode=labels[y] + front=[] + back=[] + has_a,has_b=False,False + while True: + if xnode==a or ynode==a: + has_a=True + if ynode==b or xnode==b: + has_b=True + if xnodeynode: + front.append(xnode) + xnode=tree[xnode] + elif ynode==xnode: + back.insert(0,ynode) + front.extend(back) + return (has_a and has_b) + + + def char_table(self): + base=self.taxa[0] + answer=[] + for x in self.parents: + if x<1: + continue + row='' + for t in sorted(self.taxa): + row+=str(int(self.separates(x,base,t))) + answer.append(row) + return(answer[1:]) + + + + + + + + + + + + + \ No newline at end of file diff --git a/nwck_class_3.py b/nwck_class_3.py new file mode 100644 index 0000000..a1274bd --- /dev/null +++ b/nwck_class_3.py @@ -0,0 +1,307 @@ +import numpy as np +from collections import defaultdict + +class Newick_Tree: + def __init__(self,s): + (self.tree,self.labels,self.weights,self.taxa,self.dtree,self.label_name)=self.build_tree2(s) + del self.tree[0] + del self.tree[1] + + self.parents=np.unique(self.tree.values()) + self.string=s + self.taxa.sort() + self.root=self.labels[self.taxa[0]] + self.reroot_tree(self.root) + self.min={} + self.max={} + self.leaves_postordered=[x for x in self.post_order_leaves(self.root)] + self.postorder_index=dict(zip(self.leaves_postordered,range(len(self.leaves_postordered)))) + self.chars={} + self.node_to_taxon={} + for i,x in enumerate(self.taxa): + self.node_to_taxon[self.labels[x]]=i + #self.char_table(self.root) + + + def tokens(self,s): + cursor=0 + n='' + while cursor0: + yield 'LABEL',n.strip() + + def build_tree2(self,s): + tree,labels,weights,label_name={},{},{},{} + dtree=defaultdict(list) + taxa=[] + parent,curnode,savenode=-1,0,0 + new_node=1 + tree[0]=-1 #introduce an artificial root note + prior_kind=None + for (kind,value) in self.tokens(s): + if kind=='OPEN_PAREN': + parent=curnode + curnode=new_node + tree[curnode]=parent + dtree[parent].append(curnode) + new_node=new_node+1 + prior_kind=kind + continue + if kind=='LABEL': + if prior_kind=='CLOSE_PAREN': + labels[value]=savenode + label_name[savenode]=value + elif prior_kind=='COLON': + weights[savenode]=int(value) + else: + labels[value]=new_node + label_name[new_node]=value + tree[new_node]=curnode + dtree[curnode].append(new_node) + savenode=new_node # needed if this label is followed by colon + taxa.append(value) + new_node+=1 + prior_kind=kind + continue + + if kind=='COLON': + if prior_kind=='COMMA' or prior_kind=='OPEN_PAREN': + tree[new_node]=curnode + dtree[curnode].append(new_node) + #savenode=new_node + new_node+=1 + prior_kind=kind + continue + + if kind=='CLOSE_PAREN': + if prior_kind=='COMMA': + tree[new_node]=curnode + dtree[curnode].append(new_node) + new_node+=1 + savenode=curnode + curnode=parent + parent=tree[curnode] + prior_kind=kind + continue + if kind=='COMMA': + if prior_kind=='COMMA': + tree[new_node]=curnode + new_node+=1 + prior_kind=kind + continue + + if parent!=-1: + raise Exception('ParseError') + else: + return tree,labels,weights,taxa,dtree,label_name + + + def path_to_root(self,x): + tree=self.tree + start_node=self.labels[x] + path=[start_node] + parent=tree[start_node] + while parent in tree: + path.append(parent) + parent=tree[parent] + path.append(parent) + return path + + def path_to_root_nodes(self,x): + path=[x] + while True: + try: + #print path + parent=self.tree[x] + except KeyError: + return path + path.append(parent) + x=parent + + + def common_ancestor(self,x,y): + tree,labels,weights=self.tree,self.labels,self.weights + xnode=labels[x] + ynode=labels[y] + d=0 + while True: + if xnodeynode: + front.append(xnode) + xnode=tree[xnode] + elif ynode==xnode: + back.insert(0,ynode) + front.extend(back) + return front + +# def separates(self,a,x,y): +# tree,labels,weights=self.tree,self.labels,self.weights +# b=tree[a] +# xnode=labels[x] +# ynode=labels[y] +# front=[] +# back=[] +# has_a,has_b=False,False +# while True: +# if xnode==a or ynode==a: +# has_a=True +# if ynode==b or xnode==b: +# has_b=True +# if xnodeynode: +# front.append(xnode) +# xnode=tree[xnode] +# elif ynode==xnode: +# back.insert(0,ynode) +# front.extend(back) +# return (has_a and has_b) + + + def char_table(self,base): + self.chars[base]=[0]*len(self.taxa) + #print base + if len(self.dtree[base])==0: + self.chars[base][self.node_to_taxon[base]]=1 + return + else: + for x in self.dtree[base]: + self.char_table(x) + for x in self.dtree[base]: + for i,y in enumerate(self.chars[x]): + if y==1: + self.chars[base][i]=1 + + def char_table_print(self,base): + while len(self.dtree[base])==1: + base=self.dtree[base][0] + for y in self.dtree[base]: + for x in self.post_order(y): + if len(self.dtree[x])==0: + continue + else: + print ''.join(map(str,self.chars[x])) + + + def post_order(self,base): + for x in self.dtree[base]: + for x in self.post_order(x): + yield x + yield base + + def post_order_leaves(self,base): + for x in self.dtree[base]: + for x in self.post_order(x): + if len(self.dtree[x])==0: + yield x + + def reroot_tree(self,target): + p=self.path_to_root_nodes(target) + node=p[0] + try: + self.dtree[self.tree[target]].remove(target) + except KeyError: + pass + try: + self.dtree[target].append(self.tree[target]) + except KeyError: + pass + try: + del self.tree[target] + except KeyError: + pass + for x in p[1:]: + try: + self.dtree[self.tree[x]].remove(x) + except KeyError: + pass + try: + self.dtree[x].append(self.tree[x]) + except KeyError: + pass + try: + self.tree[x]=node + except KeyError: + pass + node=x + + def split_list(self,base): + if len(self.dtree[base])==0: + self.min[base]=self.postorder_index[base] + self.max[base]=self.postorder_index[base] + # self.width[base]=self.max[base]-self.min[base] + return + else: + for x in self.dtree[base]: + self.split_list(x) + self.min[base]=min([self.min[x] for x in self.dtree[base]]) + self.max[base]=max([self.max[x] for x in self.dtree[base]]) + # self.width[base]=self.max[base]-self.min[base] + return + + + + + + + + + + \ No newline at end of file diff --git a/nwck_class_4.py b/nwck_class_4.py new file mode 100644 index 0000000..4f90eca --- /dev/null +++ b/nwck_class_4.py @@ -0,0 +1,307 @@ +import numpy as np +from collections import defaultdict + +class Newick_Tree_Rooted: + def __init__(self,s): + (self.tree,self.labels,self.weights,self.taxa,self.dtree,self.label_name)=self.build_tree2(s) + #del self.tree[0] + #del self.tree[1] + + self.parents=np.unique(self.tree.values()) + self.string=s + self.taxa.sort() + self.root=0 + #self.reroot_tree(self.root) + self.min={} + self.max={} + self.leaves_postordered=[x for x in self.post_order_leaves(self.root)] + #self.postorder_index=dict(zip(self.leaves_postordered,range(len(self.leaves_postordered)))) + #self.chars={} + #self.node_to_taxon={} + #for i,x in enumerate(self.taxa): + # self.node_to_taxon[self.labels[x]]=i + #self.char_table(self.root) + + + def tokens(self,s): + cursor=0 + n='' + while cursor0: + yield 'LABEL',n.strip() + + def build_tree2(self,s): + tree,labels,weights,label_name={},{},{},{} + dtree=defaultdict(list) + taxa=[] + parent,curnode,savenode=-1,0,0 + new_node=1 + tree[0]=-1 #introduce an artificial root note + prior_kind=None + for (kind,value) in self.tokens(s): + if kind=='OPEN_PAREN': + parent=curnode + curnode=new_node + tree[curnode]=parent + dtree[parent].append(curnode) + new_node=new_node+1 + prior_kind=kind + continue + if kind=='LABEL': + if prior_kind=='CLOSE_PAREN': + labels[value]=savenode + label_name[savenode]=value + elif prior_kind=='COLON': + weights[savenode]=int(value) + else: + labels[value]=new_node + label_name[new_node]=value + tree[new_node]=curnode + dtree[curnode].append(new_node) + savenode=new_node # needed if this label is followed by colon + taxa.append(value) + new_node+=1 + prior_kind=kind + continue + + if kind=='COLON': + if prior_kind=='COMMA' or prior_kind=='OPEN_PAREN': + tree[new_node]=curnode + dtree[curnode].append(new_node) + #savenode=new_node + new_node+=1 + prior_kind=kind + continue + + if kind=='CLOSE_PAREN': + if prior_kind=='COMMA': + tree[new_node]=curnode + dtree[curnode].append(new_node) + new_node+=1 + savenode=curnode + curnode=parent + parent=tree[curnode] + prior_kind=kind + continue + if kind=='COMMA': + if prior_kind=='COMMA': + tree[new_node]=curnode + new_node+=1 + prior_kind=kind + continue + + if parent!=-1: + raise Exception('ParseError') + else: + return tree,labels,weights,taxa,dtree,label_name + + + def path_to_root(self,x): + tree=self.tree + start_node=self.labels[x] + path=[start_node] + parent=tree[start_node] + while parent in tree: + path.append(parent) + parent=tree[parent] + path.append(parent) + return path + + def path_to_root_nodes(self,x): + path=[x] + while True: + try: + #print path + parent=self.tree[x] + except KeyError: + return path + path.append(parent) + x=parent + + + def common_ancestor(self,x,y): + tree,labels,weights=self.tree,self.labels,self.weights + xnode=labels[x] + ynode=labels[y] + d=0 + while True: + if xnodeynode: + front.append(xnode) + xnode=tree[xnode] + elif ynode==xnode: + back.insert(0,ynode) + front.extend(back) + return front + +# def separates(self,a,x,y): +# tree,labels,weights=self.tree,self.labels,self.weights +# b=tree[a] +# xnode=labels[x] +# ynode=labels[y] +# front=[] +# back=[] +# has_a,has_b=False,False +# while True: +# if xnode==a or ynode==a: +# has_a=True +# if ynode==b or xnode==b: +# has_b=True +# if xnodeynode: +# front.append(xnode) +# xnode=tree[xnode] +# elif ynode==xnode: +# back.insert(0,ynode) +# front.extend(back) +# return (has_a and has_b) + + + def char_table(self,base): + self.chars[base]=[0]*len(self.taxa) + #print base + if len(self.dtree[base])==0: + self.chars[base][self.node_to_taxon[base]]=1 + return + else: + for x in self.dtree[base]: + self.char_table(x) + for x in self.dtree[base]: + for i,y in enumerate(self.chars[x]): + if y==1: + self.chars[base][i]=1 + + def char_table_print(self,base): + while len(self.dtree[base])==1: + base=self.dtree[base][0] + for y in self.dtree[base]: + for x in self.post_order(y): + if len(self.dtree[x])==0: + continue + else: + print ''.join(map(str,self.chars[x])) + + + def post_order(self,base): + for x in self.dtree[base]: + for x in self.post_order(x): + yield x + yield base + + def post_order_leaves(self,base): + for x in self.dtree[base]: + for x in self.post_order(x): + if len(self.dtree[x])==0: + yield x + + def reroot_tree(self,target): + p=self.path_to_root_nodes(target) + node=p[0] + try: + self.dtree[self.tree[target]].remove(target) + except KeyError: + pass + try: + self.dtree[target].append(self.tree[target]) + except KeyError: + pass + try: + del self.tree[target] + except KeyError: + pass + for x in p[1:]: + try: + self.dtree[self.tree[x]].remove(x) + except KeyError: + pass + try: + self.dtree[x].append(self.tree[x]) + except KeyError: + pass + try: + self.tree[x]=node + except KeyError: + pass + node=x + + def split_list(self,base): + if len(self.dtree[base])==0: + self.min[base]=self.postorder_index[base] + self.max[base]=self.postorder_index[base] + # self.width[base]=self.max[base]-self.min[base] + return + else: + for x in self.dtree[base]: + self.split_list(x) + self.min[base]=min([self.min[x] for x in self.dtree[base]]) + self.max[base]=max([self.max[x] for x in self.dtree[base]]) + # self.width[base]=self.max[base]-self.min[base] + return + + + + + + + + + + \ No newline at end of file diff --git a/nwck_class_5.py b/nwck_class_5.py new file mode 100644 index 0000000..ee04147 --- /dev/null +++ b/nwck_class_5.py @@ -0,0 +1,320 @@ +import numpy as np +from collections import defaultdict +# this version properly handles weighted edges when the tree is re-rooted, +# and it allows for floating point weights for likliehood computations +class Newick_Tree: + def __init__(self,s): + (self.tree,self.labels,self.weights,self.taxa,self.dtree,self.label_name)=self.build_tree2(s) + del self.tree[0] + del self.tree[1] + + self.parents=np.unique(self.tree.values()) + self.string=s + self.taxa.sort() + self.root=self.labels[self.taxa[0]] + self.reroot_tree(self.root) + self.min={} + self.max={} + self.leaves_postordered=[x for x in self.post_order_leaves(self.root)] + self.postorder_index=dict(zip(self.leaves_postordered,range(len(self.leaves_postordered)))) + self.chars={} + self.node_to_taxon={} + for i,x in enumerate(self.taxa): + self.node_to_taxon[self.labels[x]]=i + #self.char_table(self.root) + + + def tokens(self,s): + cursor=0 + n='' + while cursor0: + yield 'LABEL',n.strip() + + def build_tree2(self,s): + tree,labels,weights,label_name={},{},{},{} + dtree=defaultdict(list) + taxa=[] + parent,curnode,savenode=-1,0,0 + new_node=1 + tree[0]=-1 #introduce an artificial root note + prior_kind=None + for (kind,value) in self.tokens(s): + if kind=='OPEN_PAREN': + parent=curnode + curnode=new_node + tree[curnode]=parent + dtree[parent].append(curnode) + new_node=new_node+1 + prior_kind=kind + continue + if kind=='LABEL': + if prior_kind=='CLOSE_PAREN': + labels[value]=savenode + label_name[savenode]=value + elif prior_kind=='COLON': + weights[savenode]=float(value) + else: + labels[value]=new_node + label_name[new_node]=value + tree[new_node]=curnode + dtree[curnode].append(new_node) + savenode=new_node # needed if this label is followed by colon + taxa.append(value) + new_node+=1 + prior_kind=kind + continue + + if kind=='COLON': + if prior_kind=='COMMA' or prior_kind=='OPEN_PAREN': + tree[new_node]=curnode + dtree[curnode].append(new_node) + #savenode=new_node + new_node+=1 + prior_kind=kind + continue + + if kind=='CLOSE_PAREN': + if prior_kind=='COMMA': + tree[new_node]=curnode + dtree[curnode].append(new_node) + new_node+=1 + savenode=curnode + curnode=parent + parent=tree[curnode] + prior_kind=kind + continue + if kind=='COMMA': + if prior_kind=='COMMA': + tree[new_node]=curnode + new_node+=1 + prior_kind=kind + continue + + if parent!=-1: + raise Exception('ParseError') + else: + return tree,labels,weights,taxa,dtree,label_name + + + def path_to_root(self,x): + tree=self.tree + start_node=self.labels[x] + path=[start_node] + parent=tree[start_node] + while parent in tree: + path.append(parent) + parent=tree[parent] + path.append(parent) + return path + + def path_to_root_nodes(self,x): + path=[x] + while True: + try: + #print path + parent=self.tree[x] + except KeyError: + return path + path.append(parent) + x=parent + + + def common_ancestor(self,x,y): + tree,labels,weights=self.tree,self.labels,self.weights + xnode=labels[x] + ynode=labels[y] + d=0 + while True: + if xnodeynode: + front.append(xnode) + xnode=tree[xnode] + elif ynode==xnode: + back.insert(0,ynode) + front.extend(back) + return front + +# def separates(self,a,x,y): +# tree,labels,weights=self.tree,self.labels,self.weights +# b=tree[a] +# xnode=labels[x] +# ynode=labels[y] +# front=[] +# back=[] +# has_a,has_b=False,False +# while True: +# if xnode==a or ynode==a: +# has_a=True +# if ynode==b or xnode==b: +# has_b=True +# if xnodeynode: +# front.append(xnode) +# xnode=tree[xnode] +# elif ynode==xnode: +# back.insert(0,ynode) +# front.extend(back) +# return (has_a and has_b) + + + def char_table(self,base): + self.chars[base]=[0]*len(self.taxa) + #print base + if len(self.dtree[base])==0: + self.chars[base][self.node_to_taxon[base]]=1 + return + else: + for x in self.dtree[base]: + self.char_table(x) + for x in self.dtree[base]: + for i,y in enumerate(self.chars[x]): + if y==1: + self.chars[base][i]=1 + + def char_table_print(self,base): + while len(self.dtree[base])==1: + base=self.dtree[base][0] + for y in self.dtree[base]: + for x in self.post_order(y): + if len(self.dtree[x])==0: + continue + else: + print ''.join(map(str,self.chars[x])) + + + def post_order(self,base): + for x in self.dtree[base]: + for x in self.post_order(x): + yield x + yield base + + def post_order_leaves(self,base): + for x in self.dtree[base]: + for x in self.post_order(x): + if len(self.dtree[x])==0: + yield x + + def reroot_tree(self,target): + p=self.path_to_root_nodes(target) + + node=p[0] + # remove target node from list of children of target node's parent + try: + self.dtree[self.tree[target]].remove(target) + except KeyError: + pass + # make parent of target node into child of target node + try: + self.dtree[target].append(self.tree[target]) + except KeyError: + pass + # now target node doesn't have a parent because it's the root + try: + del self.tree[target] + except KeyError: + pass + for x in p[1:]: + try: + self.dtree[self.tree[x]].remove(x) + except KeyError: + pass + try: + self.dtree[x].append(self.tree[x]) + except KeyError: + pass + try: + self.tree[x]=node + except KeyError: + pass + node=x + for x in p[::-1]: + try: + self.weights[x]=self.weights[self.tree[x]] + except KeyError: + pass + del self.weights[target] + + + + def split_list(self,base): + if len(self.dtree[base])==0: + self.min[base]=self.postorder_index[base] + self.max[base]=self.postorder_index[base] + # self.width[base]=self.max[base]-self.min[base] + return + else: + for x in self.dtree[base]: + self.split_list(x) + self.min[base]=min([self.min[x] for x in self.dtree[base]]) + self.max[base]=max([self.max[x] for x in self.dtree[base]]) + # self.width[base]=self.max[base]-self.min[base] + return + + + + + + + + + + \ No newline at end of file diff --git a/nwck_class_rooted.py b/nwck_class_rooted.py new file mode 100644 index 0000000..fafef85 --- /dev/null +++ b/nwck_class_rooted.py @@ -0,0 +1,307 @@ +import numpy as np +from collections import defaultdict + +class Newick_Tree_Rooted: + def __init__(self,s): + (self.tree,self.labels,self.weights,self.taxa,self.dtree,self.label_name)=self.build_tree2(s) + del self.tree[0] + del self.tree[1] + del self.dtree[0] + self.parents=np.unique(self.tree.values()) + self.string=s + self.taxa.sort() + self.root=1 + #self.reroot_tree(self.root) + self.min={} + self.max={} + self.leaves_postordered=[x for x in self.post_order_leaves(self.root)] + #self.postorder_index=dict(zip(self.leaves_postordered,range(len(self.leaves_postordered)))) + #self.chars={} + #self.node_to_taxon={} + #for i,x in enumerate(self.taxa): + # self.node_to_taxon[self.labels[x]]=i + #self.char_table(self.root) + + + def tokens(self,s): + cursor=0 + n='' + while cursor0: + yield 'LABEL',n.strip() + + def build_tree2(self,s): + tree,labels,weights,label_name={},{},{},{} + dtree=defaultdict(list) + taxa=[] + parent,curnode,savenode=-1,0,0 + new_node=1 + tree[0]=-1 #introduce an artificial root note + prior_kind=None + for (kind,value) in self.tokens(s): + if kind=='OPEN_PAREN': + parent=curnode + curnode=new_node + tree[curnode]=parent + dtree[parent].append(curnode) + new_node=new_node+1 + prior_kind=kind + continue + if kind=='LABEL': + if prior_kind=='CLOSE_PAREN': + labels[value]=savenode + label_name[savenode]=value + elif prior_kind=='COLON': + weights[savenode]=int(value) + else: + labels[value]=new_node + label_name[new_node]=value + tree[new_node]=curnode + dtree[curnode].append(new_node) + savenode=new_node # needed if this label is followed by colon + taxa.append(value) + new_node+=1 + prior_kind=kind + continue + + if kind=='COLON': + if prior_kind=='COMMA' or prior_kind=='OPEN_PAREN': + tree[new_node]=curnode + dtree[curnode].append(new_node) + #savenode=new_node + new_node+=1 + prior_kind=kind + continue + + if kind=='CLOSE_PAREN': + if prior_kind=='COMMA': + tree[new_node]=curnode + dtree[curnode].append(new_node) + new_node+=1 + savenode=curnode + curnode=parent + parent=tree[curnode] + prior_kind=kind + continue + if kind=='COMMA': + if prior_kind=='COMMA': + tree[new_node]=curnode + new_node+=1 + prior_kind=kind + continue + + if parent!=-1: + raise Exception('ParseError') + else: + return tree,labels,weights,taxa,dtree,label_name + + + def path_to_root(self,x): + tree=self.tree + start_node=self.labels[x] + path=[start_node] + parent=tree[start_node] + while parent in tree: + path.append(parent) + parent=tree[parent] + path.append(parent) + return path + + def path_to_root_nodes(self,x): + path=[x] + while True: + try: + #print path + parent=self.tree[x] + except KeyError: + return path + path.append(parent) + x=parent + + + def common_ancestor(self,x,y): + tree,labels,weights=self.tree,self.labels,self.weights + xnode=labels[x] + ynode=labels[y] + d=0 + while True: + if xnodeynode: + front.append(xnode) + xnode=tree[xnode] + elif ynode==xnode: + back.insert(0,ynode) + front.extend(back) + return front + +# def separates(self,a,x,y): +# tree,labels,weights=self.tree,self.labels,self.weights +# b=tree[a] +# xnode=labels[x] +# ynode=labels[y] +# front=[] +# back=[] +# has_a,has_b=False,False +# while True: +# if xnode==a or ynode==a: +# has_a=True +# if ynode==b or xnode==b: +# has_b=True +# if xnodeynode: +# front.append(xnode) +# xnode=tree[xnode] +# elif ynode==xnode: +# back.insert(0,ynode) +# front.extend(back) +# return (has_a and has_b) + + + def char_table(self,base): + self.chars[base]=[0]*len(self.taxa) + #print base + if len(self.dtree[base])==0: + self.chars[base][self.node_to_taxon[base]]=1 + return + else: + for x in self.dtree[base]: + self.char_table(x) + for x in self.dtree[base]: + for i,y in enumerate(self.chars[x]): + if y==1: + self.chars[base][i]=1 + + def char_table_print(self,base): + while len(self.dtree[base])==1: + base=self.dtree[base][0] + for y in self.dtree[base]: + for x in self.post_order(y): + if len(self.dtree[x])==0: + continue + else: + print ''.join(map(str,self.chars[x])) + + + def post_order(self,base): + for x in self.dtree[base]: + for x in self.post_order(x): + yield x + yield base + + def post_order_leaves(self,base): + for x in self.dtree[base]: + for x in self.post_order(x): + if len(self.dtree[x])==0: + yield x + + def reroot_tree(self,target): + p=self.path_to_root_nodes(target) + node=p[0] + try: + self.dtree[self.tree[target]].remove(target) + except KeyError: + pass + try: + self.dtree[target].append(self.tree[target]) + except KeyError: + pass + try: + del self.tree[target] + except KeyError: + pass + for x in p[1:]: + try: + self.dtree[self.tree[x]].remove(x) + except KeyError: + pass + try: + self.dtree[x].append(self.tree[x]) + except KeyError: + pass + try: + self.tree[x]=node + except KeyError: + pass + node=x + + def split_list(self,base): + if len(self.dtree[base])==0: + self.min[base]=self.postorder_index[base] + self.max[base]=self.postorder_index[base] + # self.width[base]=self.max[base]-self.min[base] + return + else: + for x in self.dtree[base]: + self.split_list(x) + self.min[base]=min([self.min[x] for x in self.dtree[base]]) + self.max[base]=max([self.max[x] for x in self.dtree[base]]) + # self.width[base]=self.max[base]-self.min[base] + return + + + + + + + + + + \ No newline at end of file diff --git a/nwck_save.py b/nwck_save.py new file mode 100644 index 0000000..adf46bf --- /dev/null +++ b/nwck_save.py @@ -0,0 +1,167 @@ +def tokens(s): + cursor=0 + n='' + while cursor0: + yield 'LABEL',cursor,n.strip() + + + + +def build_tree(s): + tree={} + curnode=0 + parent=-1 + new_node=1 + tree[0]=-1 + labels={} + for (kind,cursor,value) in tokens(s): + if kind=='OPEN_PAREN': + parent=curnode + curnode=new_node + tree[curnode]=parent + new_node=new_node+1 + continue + if kind=='LABEL': + x=new_node + new_node+=1 + labels[value]=x + tree[x]=curnode + continue + if kind=='CLOSE_PAREN': + curnode=parent + parent=tree[curnode] + continue + return tree,labels + + +def build_tree2(s): + tree={} + curnode=0 + parent=-1 + new_node=1 + tree[0]=-1 + labels={} + prior_kind=None + for (kind,cursor,value) in tokens(s): + if kind=='OPEN_PAREN': + parent=curnode + curnode=new_node + tree[curnode]=parent + new_node=new_node+1 + prior_kind=kind + continue + if kind=='LABEL': + if prior_kind=='CLOSE_PAREN': + labels[value]=savenode + else: + x=new_node + new_node+=1 + labels[value]=x + tree[x]=curnode + prior_kind=kind + continue + if kind=='CLOSE_PAREN': + if prior_kind=='COMMA': + x=new_node + new_node+=1 + tree[x]=curnode + savenode=curnode + curnode=parent + parent=tree[curnode] + prior_kind=kind + continue + if kind=='COMMA': + if prior_kind=='COMMA': + x=new_node + new_node+=1 + tree[x]=curnode + prior_kind=kind + continue + + + if parent!=-1: + raise Exception('ParseError') + else: + return tree,labels + + +s="((((((Agama_ammon,Latastia_lineatus),(Boiga_atthis,Bos_leporosum)),Turdus_laticauda),(Circus_acutus,Dipus_franckii)),(((((Asthenodipsas_caudatus,Passer_novaeguineae),Testudo_quadriocellata),Oedura_kopsteini),(((Basiliscus_rosmarus,(Lepidobatrachus_viridescens,Streptopelia_breitensteini)),((Butastur_hispida,Ciconia_fiber),Lepus_multifasciata)),sibiricus_aegyptia)),Hirundo_fissipes)),((Aix_erythronotus,Uroplatus_garulla),Almo_guttifer),(((((((((((((((((((((((((Alaus_fasciata,Oceanodroma_kingii),(Marmota_vegans,Phrynosoma_amethistina)),Tupinambus_vitticeps),Corallus_baeri),Ciconia_wogura),Budytes_marcianus),Ortigometra_brachydactyla),Phrynosoma_oenanthe),((((Ambystoma_taezanowskyi,Anolis_adspersus),((Monodon_stejnegeri,(Parus_walti,Phrynops_fulva)),Pogona_alterna)),((Chrysopelea_torquatus,Ninox_monachus),Riparia_cambridgei)),Phoca_carbo)),Aythya_stagnalis),Tropidurus_not),Paramesotriton_docilis),Lycaenopsis_hypomelus),Phormictopus_leucophyllata),Petrocincla_oxycephalum),Vipera_arizonensis),((Almo_carnivorus,Nyctaalus_dulkeitiana),Chelodina_dentata)),(((((((((((((Ambystoma_czerskii,(Fulica_stagnalis,(Haplopelma_multituberculatus,Phrynohyas_himalayanus))),Xenochrophis_caninus),Ptychozoon_semipalmatus),Querquedula_graeca),Haliaetus_caniceps),Machetes_laevis),(Litoria_thibetanus,Otis_grandis)),Uroplatus_platyrhinos),Parus_pardalis),(Camptoloma_constrictor,Leuciscus_iguana)),(Lamprophis_fernandi,Sorex_onocrotalus)),((((((((Boiga_gecko,Tropidurus_guentheri),Euspiza_veredus),Net_turtor),Polypedates_krueperi),Notophthalmus_hispida),Ceratophrys_kingii),(Capella_bairdi,(Paraphysa_marmorata,Sus_taxus))),Tropidurus_geyri)),Scincus_semipalmatus)),Thymallus_tristis),(Phyllopneuste_oenanthe,Psammophis_pardus)),Desnana_parahybana),Haplopelma_quadrivirgata),Egretta_insularis),((((Bronchocela_leptochelis,((Circus_mycterizans,(Dasypeltis_orientalis,(Meles_rufina,Pandinus_troglodytes))),Thymallus_alpestris)),Prunella_celer),Ziphius_bifasciatus),(Motacilla_sujfunensis,Neolycaena_yeltoniensis))),Chrttusia_davidiana));" +x,y='Psammophis_pardus', 'Phrynohyas_himalayanus' + + + +def path_to_root(x,tree,labels): + start_node=labels[x] + path=[start_node] + parent=tree[start_node] + while parent!=-1: + path.append(parent) + parent=tree[parent] + return path + + +def tree_distance(x,y,tree,labels): + xnode=labels[x] + ynode=labels[y] + d=0 + while True: + if xnode0: + yield 'LABEL',n.strip() + +def build_tree2(s): + tree,labels,weights={},{},{} + taxa=[] + parent,curnode=-1,0 + new_node=1 + tree[0]=-1 #introduce an artificial root note + prior_kind=None + for (kind,value) in tokens(s): + if kind=='OPEN_PAREN': + parent=curnode + curnode=new_node + tree[curnode]=parent + new_node=new_node+1 + prior_kind=kind + continue + if kind=='LABEL': + if prior_kind=='CLOSE_PAREN': + labels[value]=savenode + elif prior_kind=='COLON': + weights[savenode]=int(value) + else: + labels[value]=new_node + tree[new_node]=curnode + savenode=new_node # needed if this label is followed by colon + taxa.append(value) + new_node+=1 + prior_kind=kind + continue + + if kind=='COLON': + if prior_kind=='COMMA' or prior_kind=='OPEN_PAREN': + tree[new_node]=curnode + # savenode=new_node + new_node+=1 + prior_kind=kind + continue + + if kind=='CLOSE_PAREN': + if prior_kind=='COMMA': + tree[new_node]=curnode + new_node+=1 + savenode=curnode + curnode=parent + parent=tree[curnode] + prior_kind=kind + continue + if kind=='COMMA': + if prior_kind=='COMMA': + tree[new_node]=curnode + new_node+=1 + prior_kind=kind + continue + + if parent!=-1: + raise Exception('ParseError') + else: + return tree,labels,weights,taxa + + +s="((((((Agama_ammon,Latastia_lineatus),(Boiga_atthis,Bos_leporosum)),Turdus_laticauda),(Circus_acutus,Dipus_franckii)),(((((Asthenodipsas_caudatus,Passer_novaeguineae),Testudo_quadriocellata),Oedura_kopsteini),(((Basiliscus_rosmarus,(Lepidobatrachus_viridescens,Streptopelia_breitensteini)),((Butastur_hispida,Ciconia_fiber),Lepus_multifasciata)),sibiricus_aegyptia)),Hirundo_fissipes)),((Aix_erythronotus,Uroplatus_garulla),Almo_guttifer),(((((((((((((((((((((((((Alaus_fasciata,Oceanodroma_kingii),(Marmota_vegans,Phrynosoma_amethistina)),Tupinambus_vitticeps),Corallus_baeri),Ciconia_wogura),Budytes_marcianus),Ortigometra_brachydactyla),Phrynosoma_oenanthe),((((Ambystoma_taezanowskyi,Anolis_adspersus),((Monodon_stejnegeri,(Parus_walti,Phrynops_fulva)),Pogona_alterna)),((Chrysopelea_torquatus,Ninox_monachus),Riparia_cambridgei)),Phoca_carbo)),Aythya_stagnalis),Tropidurus_not),Paramesotriton_docilis),Lycaenopsis_hypomelus),Phormictopus_leucophyllata),Petrocincla_oxycephalum),Vipera_arizonensis),((Almo_carnivorus,Nyctaalus_dulkeitiana),Chelodina_dentata)),(((((((((((((Ambystoma_czerskii,(Fulica_stagnalis,(Haplopelma_multituberculatus,Phrynohyas_himalayanus))),Xenochrophis_caninus),Ptychozoon_semipalmatus),Querquedula_graeca),Haliaetus_caniceps),Machetes_laevis),(Litoria_thibetanus,Otis_grandis)),Uroplatus_platyrhinos),Parus_pardalis),(Camptoloma_constrictor,Leuciscus_iguana)),(Lamprophis_fernandi,Sorex_onocrotalus)),((((((((Boiga_gecko,Tropidurus_guentheri),Euspiza_veredus),Net_turtor),Polypedates_krueperi),Notophthalmus_hispida),Ceratophrys_kingii),(Capella_bairdi,(Paraphysa_marmorata,Sus_taxus))),Tropidurus_geyri)),Scincus_semipalmatus)),Thymallus_tristis),(Phyllopneuste_oenanthe,Psammophis_pardus)),Desnana_parahybana),Haplopelma_quadrivirgata),Egretta_insularis),((((Bronchocela_leptochelis,((Circus_mycterizans,(Dasypeltis_orientalis,(Meles_rufina,Pandinus_troglodytes))),Thymallus_alpestris)),Prunella_celer),Ziphius_bifasciatus),(Motacilla_sujfunensis,Neolycaena_yeltoniensis))),Chrttusia_davidiana));" +x,y='Psammophis_pardus', 'Phrynohyas_himalayanus' + + + +def path_to_root(x,tree,labels): + start_node=labels[x] + path=[start_node] + parent=tree[start_node] + while parent!=-1: + path.append(parent) + parent=tree[parent] + return path + + +def tree_distance(x,y,tree,labels,weights): + xnode=labels[x] + ynode=labels[y] + d=0 + while True: + if xnode0: + yield 'LABEL',n.strip() + +def build_tree2(s): + tree,labels,weights={},{},{} + taxa=[] + parent,curnode,savenode=-1,0,0 + new_node=1 + tree[0]=-1 #introduce an artificial root note + prior_kind=None + for (kind,value) in tokens(s): + if kind=='OPEN_PAREN': + parent=curnode + curnode=new_node + tree[curnode]=parent + new_node=new_node+1 + prior_kind=kind + continue + if kind=='LABEL': + if prior_kind=='CLOSE_PAREN': + labels[value]=savenode + elif prior_kind=='COLON': + weights[savenode]=int(value) + else: + labels[value]=new_node + tree[new_node]=curnode + savenode=new_node # needed if this label is followed by colon + taxa.append(value) + new_node+=1 + prior_kind=kind + continue + + if kind=='COLON': + if prior_kind=='COMMA' or prior_kind=='OPEN_PAREN': + tree[new_node]=curnode + #savenode=new_node + new_node+=1 + prior_kind=kind + continue + + if kind=='CLOSE_PAREN': + if prior_kind=='COMMA': + tree[new_node]=curnode + new_node+=1 + savenode=curnode + curnode=parent + parent=tree[curnode] + prior_kind=kind + continue + if kind=='COMMA': + if prior_kind=='COMMA': + tree[new_node]=curnode + new_node+=1 + prior_kind=kind + continue + + if parent!=-1: + raise Exception('ParseError') + else: + return tree,labels,weights,taxa + + +def path_to_root(x,tree,labels): + start_node=labels[x] + path=[start_node] + parent=tree[start_node] + while parent!=-1: + path.append(parent) + parent=tree[parent] + return path + + +def tree_distance(x,y,tree,labels,weights): + xnode=labels[x] + ynode=labels[y] + d=0 + while True: + if xnodeynode: + front.append(xnode) + xnode=tree[xnode] + elif ynode==xnode: + back.insert(0,ynode) + front.extend(back) + return front + +def separates(a,x,y,tree,labels,weights): + b=tree[a] + xnode=labels[x] + ynode=labels[y] + front=[] + back=[] + has_a,has_b=False,False + while True: + if xnode==a or ynode==a: + has_a=True + if ynode==b or xnode==b: + has_b=True + if xnodeynode: + front.append(xnode) + xnode=tree[xnode] + elif ynode==xnode: + back.insert(0,ynode) + front.extend(back) + return (has_a and has_b) + + +f=open('rosalind_ctbl.txt','rU') +s=f.readline() +f.close() +(tree,labels,weights,taxa)=build_tree2(s) + +parents=np.unique(tree.values()) +base=taxa[0] +f=open('chartable.txt','w') +row='' +for x in parents: + if x<1: + continue + for t in sorted(taxa): + row+=str(int(separates(x,base,t,tree,labels,weights))) + row+='\n' + +f.write(row) +f.close() + + + + + + \ No newline at end of file diff --git a/orf.py b/orf.py new file mode 100644 index 0000000..0e5a454 --- /dev/null +++ b/orf.py @@ -0,0 +1,77 @@ +#!/usr/bin/python +import sys + +rna={} +f=open('rna_table.txt','rU') +for line in f: + x=line.split() + codons=x[0::2] + acids=x[1::2] + rna_new=dict(zip(codons,acids)) + rna.update(rna_new) + +f.close() + +f=open('rosalind_orf.txt','rU') +import string +import sys + +value,key,s="","",{} +maxt, max="",0.0 + +with open("rosalind_orf.txt","rU") as f: + for x in f: + if x[0]!=">": + value=value+x.strip() + else: + if key!="": s[key]=value + key=x[1:].strip() + +s="" +sc="" + +# crude translation to RNA from DNA +for x in value: + if x=="T": + s+="U" + sc+="A" + if x=="A": + s+=x + sc+="U" + if x=="G": + s+=x + sc+="C" + if x=="C": + s+=x + sc+="G" + +proteins={} +p="" +for offset in range(0,3): + for i in range(offset,len(s)-3,3): + if s[i:i+3]=="AUG": + p="M" + for j in range(i+3,len(s)-3,3): + if rna[s[j:j+3]]=='Stop': + proteins[p]=1 + p="" + break + p=p+rna[s[j:j+3]] + +s=sc[::-1] +p="" +for offset in range(0,3): + for i in range(offset,len(s)-3,3): + if s[i:i+3]=="AUG": + p="M" + for j in range(i+3,len(s)-3,3): + if rna[s[j:j+3]]=='Stop': + proteins[p]=1 + p="" + break + p=p+rna[s[j:j+3]] + +for x in proteins.keys(): + print x + + diff --git a/overlap.py b/overlap.py new file mode 100755 index 0000000..13e2a77 --- /dev/null +++ b/overlap.py @@ -0,0 +1,31 @@ +#!/usr/bin/python + +import sys + +try: + f=open(sys.argv[1],'rU') +except: + f=sys.stdin + +value,key,s="","",{} + +# load the dictionary s with the FASTA names and strings + +for x in f: + if x[0]!=">": + value=value+x.strip() + else: + if key!="": s[key]=value + value='' + key=x[1:].strip() +s[key]=value + +# compute the links +adj=[] +for x ./in s: + for y in s: + if x!=y and s[x][:3]==s[y][-3:]: + adj.append(y+' '+x) + +for x in adj: + print x diff --git a/pairings.py b/pairings.py new file mode 100644 index 0000000..48a5729 --- /dev/null +++ b/pairings.py @@ -0,0 +1,26 @@ +#!/usr/bin/python +import math +from collections import OrderedDict + +value,key="","" +s=OrderedDict({}) + +with open("rosalind_pmch.txt","rU") as f: + for x in f: + if x[0]!=">": + value=value+x.strip() + else: + if key!="": s[key]=value + key=x[1:].strip() + value="" + s[key]=value + +for key,value in s.items(): + bases={'A':0,'U':0,'G':0,'C':0} + for x in value: + bases[x]+=1 + print key + print (math.factorial(bases['A'])*math.factorial(bases['C'])) + + + diff --git a/parsimony.py b/parsimony.py new file mode 100644 index 0000000..ba2686d --- /dev/null +++ b/parsimony.py @@ -0,0 +1,52 @@ +from nwck_class_3 import Newick_Tree +from collections import defaultdict +from my_iterators import Tree +from parsimony_class import Parsimony + +sequences=dict() +with open("Lewis/angio35Sequences6.txt","rU") as f: + for line in f: + taxon,sequence=line.split() + sequences[taxon]=sequence + + +bad=[] + +for x in sequences.keys(): + for i,y in enumerate(sequences[x]): + if y.upper() not in ['C','A','G','T'] and i not in bad: + bad.append(i) +#good=[] +# +#k=sequences.keys()[0] +#t=sequences[k] +#for i in range(len(t)): +# for u in sequences.keys(): +# if sequences[u][i]!=t[i]: +# good.append(i) + +for x in sequences.keys(): + fixed='' + for i,y in enumerate(sequences[x]): + if i not in bad: + fixed+=y.upper() + sequences[x]=fixed + +spectrum=[] +taxa=sequences.keys() +N=min([len(x) for x in sequences.values()]) +for x in Tree(taxa): + m=Parsimony(Newick_Tree(x),sequences,['A','C','G','T'],N) + print x,m.score() + spectrum.append(m.score()) + +print sorted(spectrum) + + + +#x=z[1:] + +#for t in trees(x): +# print '(%s)%s;'%(lists_to_newick(t),z[0]) + + diff --git a/parsimony_class.py b/parsimony_class.py new file mode 100644 index 0000000..c6e3906 --- /dev/null +++ b/parsimony_class.py @@ -0,0 +1,41 @@ +from nwck_class_3 import Newick_Tree + +class Parsimony: + def __init__(self,tree,sequences,alphabet,length): + self.sequences=sequences + self.seq=dict() + self.costV=dict() + self.cost=dict() + self.tree=tree + self.alphabet=alphabet + self.N=length + + for taxon in tree.labels.keys(): + self.seq[tree.labels[taxon]]=self.sequences[taxon] + for i in range(self.N): + self.costV[(tree.labels[taxon],i,sequences[taxon][i])]=0 + self.cost[(tree.labels[taxon],i)]=0 + self.sankoff() + + def sankoff(self,base=None): + if not base: + base=self.tree.root + if len(self.tree.dtree[base])==0: + return + for v in self.tree.dtree[base]: + self.sankoff(v) + for i in range(self.N): + for c in self.alphabet: + m=0 + for v in self.tree.dtree[base]: + if (v,i,c) in self.costV: + m=m+min(self.costV[(v,i,c)],self.cost[(v,i)]+1) + else: + m=m+self.cost[(v,i)]+1 + self.costV[(base,i,c)]=m + self.cost[(base,i)]=min([self.costV[(base,i,c)] for c in self.alphabet]) + return + + def score(self): + return sum([self.costV[(self.tree.root,i,self.sequences[self.tree.taxa[self.tree.node_to_taxon[self.tree.root]]][i])] for i in range(self.N)]) + diff --git a/pcov.py b/pcov.py new file mode 100644 index 0000000..aad6ebd --- /dev/null +++ b/pcov.py @@ -0,0 +1,28 @@ +import string + +mers=set() +edges=set() +nodes=set() +edict=dict() +#RC=string.maketrans('CAGT','GTCA') +with open("rosalind_pcov.txt","rU") as f: + for line in f: + mers.add(line.strip()) + # mers.add(line.strip().translate(RC)[::-1]) + +n=len(line.strip()) +for x in mers: + nodes.add(x[0:n-1]) + nodes.add(x[1:n]) + edges.add((x[0:n-1],x[1:n])) + edict[x[0:n-1]]=x[1:n] + +x=list(nodes)[0] +y=edict[x] +s=x +while y!=x: + print y + s=s+y[-1] + y=edict[y] + +print s[:-(n-2)] \ No newline at end of file diff --git a/pdpl.py b/pdpl.py new file mode 100644 index 0000000..8265787 --- /dev/null +++ b/pdpl.py @@ -0,0 +1,35 @@ +from itertools import combinations + +with open("rosalind_pdpl.txt","rU") as f: + line=f.readline().strip() +#line='2 2 3 3 4 5 6 7 8 10' +nums=sorted(map(int,line.split()),reverse=True) + +def trial_insert(breaks,differences,N): + for i in differences: + answer=True + for j in breaks: + if abs(j-i) not in differences: + answer=False + break + if answer: return i + return None + + +breaks=[0,nums[0]] +differences=nums[1:] +N=nums[0] +j=0 +while len(differences)>0: + j=trial_insert(breaks,differences,N) + print j,len(differences) + if j: + for i in breaks: + s=differences.index(abs(j-i)) + del differences[s] + breaks.append(j) + breaks=sorted(breaks,reverse=True) + + +for x in breaks: + print x, \ No newline at end of file diff --git a/perm.py b/perm.py new file mode 100755 index 0000000..6acd957 --- /dev/null +++ b/perm.py @@ -0,0 +1,26 @@ +#!/usr/bin/python + +def perm(x,last=0): + if len(x)<=last+1: + yield x + else: + for t in perm(x,last+1): + yield t + for i in range(last+1,len(x)): + x[last],x[i]=x[i],x[last] + for t in perm(x,last+1): + yield t + x[last],x[i]=x[i],x[last] + + +def fact(n): + if n==0: + return(1) + else: + return n*fact(n-1) + +print fact(6) +for t in perm([1,2,3,4,5,6]): + for i in range(len(t)): + print t[i], + print diff --git a/point.py b/point.py new file mode 100644 index 0000000..42218a9 --- /dev/null +++ b/point.py @@ -0,0 +1,12 @@ +#!/usr/bin/python + +import sys + +s1=sys.stdin.readline() +s2=sys.stdin.readline() +ct=0 + +for i in range(len(s1)): + if s1[i]!=s2[i]: ct=ct+1 + +print ct diff --git a/profile.py b/profile.py new file mode 100755 index 0000000..ab95878 --- /dev/null +++ b/profile.py @@ -0,0 +1,51 @@ +#!/usr/bin/python + +import sys + +try: + f=open(sys.argv[1],'rU') +except: + f=sys.stdin + +value,key,s="","",{} + +for x in f: + if x[0]!=">": + value=value+x.strip() + else: + if key!="": s[key]=value + value='' + key=x[1:].strip() +s[key]=value + + +m=[] + +for x in s: + i=0 + for y in s[x]: + if len(m)<=i: + m.append({}) + m[i][y]=m[i].get(y,0)+1 + i+=1 + +for x in m: + z,savey=0,'' + for y in x: + if x[y]>z: + savey=y + z=x[y] + sys.stdout.write(savey) + +print + +for x in ['A','C','G','T']: + print(x+":"), + for y in m: + print y.get(x,0), + print + + + + + diff --git a/protein_mass.py b/protein_mass.py new file mode 100644 index 0000000..837f7f6 --- /dev/null +++ b/protein_mass.py @@ -0,0 +1,17 @@ +protein_mass={} +with open("protein_masses.txt","rU") as f: + for line in f: + x=line.split() + protein_mass[x[0]]=float(x[1]) + + + +f.close() +with open("rosalind_prtm.txt","rU") as f: + s=f.read() + s=s.strip() + m=0.0 + for x in s: + m+=protein_mass[x] + +print m diff --git a/protein_rna_count.py b/protein_rna_count.py new file mode 100644 index 0000000..9493525 --- /dev/null +++ b/protein_rna_count.py @@ -0,0 +1,27 @@ +#!/usr/bin/python +import sys + +rna={} +f=open('rna_table.txt','rU') +for line in f: + x=line.split() + codons=x[0::2] + acids=x[1::2] + for x in acids: + try: + rna[x]+=1 + except: + rna.update({x:1}) +f.close() + +f=open("rosalind_mrna.txt","rU") +N=1 +S=f.read() +S=S.strip() + + +for x in S: + N=(N*rna[x]) % 1000000 + +print (3*N) % 1000000 + diff --git a/prsm.py b/prsm.py new file mode 100644 index 0000000..acbaf37 --- /dev/null +++ b/prsm.py @@ -0,0 +1,53 @@ +from collections import Counter + +protein_mass={} +with open("protein_masses.txt","rU") as f: + for line in f: + x=line.split() + protein_mass[x[0]]=round(float(x[1]),6) + +def mass(x): + m=0 + for s in x: + m+=protein_mass[s] + return m + +proteins=[] +spectrum=Counter() +with open("rosalind_prsm.txt","rU") as f: + n=int(f.readline().strip()) + for i in range(n): + proteins.append(f.readline().strip()) + for line in f: + p=line.strip() + spectrum[round(float(p),6)]+=1 + +maxn=0 +for x in proteins: + answer=Counter() + S=Counter() + for i in range(1,len(x)): + m=mass(x[0:i]) + S[round(m,6)]+=1 + m=mass(x[i:]) + S[round(m,6)]+=1 + + m=mass(x) + + S[round(m,6)]+=1 + + for t in S.keys(): + for u in spectrum.keys(): + answer[round(u-t,6)]+=1 + if answer.most_common(1)[0][1]>maxn: + maxn=answer.most_common(1)[0][1] + maxp=x + +print maxn +print maxp + + + + + + \ No newline at end of file diff --git a/python_align.py b/python_align.py new file mode 100644 index 0000000..b717754 --- /dev/null +++ b/python_align.py @@ -0,0 +1,65 @@ +from blosum62 import * +import numpy as np +from numpy import argmin +from fasta import readFASTA + +# this is an implementation of the needleman-wunsch algorithm +# and it should handle the affine gap situation + + +def mismatch_penalty(A,B): + if A!=B: + return -blosum62[A+B] + else: + return -blosum62[A+B] + +s=readFASTA("rosalind_gcon.txt") +A=s.values()[0] +B=s.values()[1] + +#A='MMM' +#B='YYYYYYY' + +nA=len(A)+1 +nB=len(B)+1 + +def gap(x,start=10,step=1): + return start + step*x + +dpV=np.zeros((nB,nA),dtype=float) +dpG=np.zeros((nB,nA),dtype=float) +dpE=np.zeros((nB,nA),dtype=float) +dpF=np.zeros((nB,nA),dtype=float) + + + + +e=gap(1) +f=gap(2)-gap(1) +i=1 +j=1 +dpG[j,i]=mismatch_penalty(B[0],A[0]) +dpE[j,i]=gap(1)+gap(1) +dpF[j,i]=gap(1)+gap(1) +i=1 +for j in xrange(2,nB): + dpG[j,i]=mismatch_penalty(B[j-1],A[0])+gap(j-1) + dpE[j,i]=min(dpE[j-1,i]+f,dpV[j-1,i]+e) + dpF[j,i]=gap(j)+gap(1) + +j=1 +for i in xrange(2,nA): + dpG[j,i]=mismatch_penalty(B[0],A[i-1])+gap(i-1) + dpE[j,i]=gap(i)+gap(1) + dpF[j,i]=min(dpF[j,i-1]+f,dpV[j,i-1]+e) + + +for i in xrange(2,nA): + for j in xrange(2,nB): + dpG[j,i]=dpV[j-1,i-1]+mismatch_penalty(B[j-1],A[i-1]) + dpE[j,i]=min(dpE[j-1,i]+f,dpV[j-1,i]+e) + dpF[j,i]=min(dpF[j,i-1]+f,dpV[j,i-1]+e) + + dpV[j,i]=min(dpE[j,i],dpF[j,i],dpG[j,i]) + +print dpV[nB-1,nA-1] \ No newline at end of file diff --git a/qrt.py b/qrt.py new file mode 100644 index 0000000..732fa29 --- /dev/null +++ b/qrt.py @@ -0,0 +1,34 @@ +from itertools import combinations +from numpy import unique +def splits(a,character): + left,right=[],[] + answer=[] + for i,x in enumerate(character): + if x=='0': + left.append(a[i]) + elif x=='1': + right.append(a[i]) + for t in combinations(left,2): + for u in combinations(right,2): + if t[0]1: + breakpoints.append(i) + continue + if p[-1]!=len(p): + breakpoints.append(len(p)) + return(breakpoints) + + + +def rdistance(p,depth=0): + z=find_breaks(p) + if len(z)==0: + return(0) + smaller=[] + rr=len(z) + small=rr + r=len(p) + + for t,i in enumerate(z): + for j in z[t+1:]: + if j-i>1: + q=p[:] + q[i:j]=reversed(p[i:j]) + loss=0 + if i==0 and q[0]==1: loss=1 + if i>0 and abs(q[i-1]-q[i])==1: loss+=1 + if j==r and q[r-1]==len(p): loss+=1 + if j1: + breakpoints.append(i) + continue + if p[-1]!=len(p): + breakpoints.append(len(p)) + return(breakpoints) + +def rdistance(pl,depth=0): + smaller=[] + small=100 + for px in pl: + (p,state0)=px + r=len(p) + z=find_breaks(p) + if len(z)==0: + return(depth,state0) + rr=len(z) + for t,i in enumerate(z): + for j in z[t+1:]: + if j-i>1: + q=p[:] + q[i:j]=reversed(p[i:j]) + loss=0 + if i==0 and q[0]==1: loss=1 + if i>0 and abs(q[i-1]-q[i])==1: loss+=1 + if j==r and q[r-1]==len(p): loss+=1 + if j1: + breakpoints.append(i) + continue + if p[-1]!=len(p): + breakpoints.append(len(p)) + return(breakpoints) + + +def rdistance(p,depth=0): + z=find_breaks(p) + if len(z)==0: + return(0) + smaller=[] + rr=len(z) + small=rr + r=len(p) + + for t,i in enumerate(z): + for j in z[t+1:]: + if j-i>1: + q=p[:] + q[i:j]=reversed(p[i:j]) + loss=0 + if i==0 and q[0]==1: loss=1 + if i>0 and abs(q[i-1]-q[i])==1: loss+=1 + if j==r and q[r-1]==len(p): loss+=1 + if j1: + breakpoints.append(i) + continue + if p[-1]!=len(p): + breakpoints.append(len(p)) + return(breakpoints) + +def rdistance(pl,depth=0): + smaller=[] + small=100 + for p in pl: + r=len(p) + z=find_breaks(p) + if len(z)==0: + return(depth) + rr=len(z) + for t,i in enumerate(z): + for j in z[t+1:]: + if j-i>1: + q=p[:] + q[i:j]=reversed(p[i:j]) + loss=0 + if i==0 and q[0]==1: loss=1 + if i>0 and abs(q[i-1]-q[i])==1: loss+=1 + if j==r and q[r-1]==len(p): loss+=1 + if jsavedp: + savedp=dp[j][i] + savedi,savedj=i,j + + +answer=[] +locs=[] +i,j = savedi,savedj +while True: +## print i,j,pointerx[j][i],pointery[j][i],dp[j][i] + if pointerx[j][i]==pointery[j][i] and pointerx[j][i]==-1: + answer.append(A[i]) + locs.append((j,i)) + i,j=i+pointery[j][i],j+pointerx[j][i] + if i<0 or j<0: + break + +print ''.join(reversed(answer)) +print locs[::-1] +lastu=0 +lastv=0 +final=[] +for x in locs[::-1]: + (u,v)=x + final.append(B[lastu:u]) + final.append(A[lastv:v]) + final.append(B[u]) + print u,v,final + lastu=u+1 + lastv=v+1 +final.append(A[lastu:]) +final.append(B[lastv:]) +#print final +#print A +#print B +print ''.join(final) + + + + + diff --git a/semiglobal.py b/semiglobal.py new file mode 100644 index 0000000..9e1921a --- /dev/null +++ b/semiglobal.py @@ -0,0 +1,105 @@ +from fasta import readFASTA +import numpy as np +import string +import operator as op + +# this version of the program computes an optimal global alignment +# of two strings (read from the file rosalind_edta.txt in FASTA format) +# using a scoring system that counts gaps and substitutions each with +# penalty 1. In other words it minimizes the edit distance. + +s=readFASTA("rosalind_smgb.txt") + +A=s.values()[0] +B=s.values()[1] + +#A='CAGCACTTGGATTCTCGG' +#B='CCAGCGTGGTAG' + +nA=len(A)+1 +nB=len(B)+1 + +#dp[j][i] is the minimum edit distance for A[:i] and B[:j] +#note that the range of i,j is zero up to + +dp=np.zeros((nB,nA),dtype=int) +pointerx=np.zeros((nB,nA),dtype=int) +pointery=np.zeros((nB,nA),dtype=int) + + +# initialization +for i in range(nA): + dp[0,i]=0 + pointery[0,i]=-1 + +for j in range(nB): + dp[j,0]=0 + pointerx[j,0]=-1 + +for i in range(1,nA): + for j in range(1,nB): + if A[i-1]==B[j-1]: + z=-1 + else: + z=1 + #print i,j,A[i-1],B[j-1] + t=[(dp[j-1,i]+1,(-1,0,1)),(dp[j,i-1]+1,(0,-1,1)),(dp[j-1,i-1]+z,(-1,-1,z))] + (t,(dx,dy,z))=min(t,key=lambda x: op.getitem(x,0)) + #print t,dx,dy,z + dp[j,i]=dp[j+dx,i+dy]+z + pointerx[j,i],pointery[j,i]=dx,dy + + + +AX=[] +BX=[] + +mindp=0 +for i in range(nA): + if dp[nB-1][i]masses[i] and round(masses[j]-masses[i],4) in mass_to_protein: + successors[i].append(j) + predecessors[j].append(i) + +dp=np.zeros(len(masses),dtype=int) +pred=np.zeros(len(masses),dtype=int) + +for i in range(len(masses)): + for j in successors[i]: + if dp[j]<=dp[i]+1: + dp[j]=dp[i]+1 + pred[j]=i + +i=np.argmax(dp) +s='' +while pred[i]!=0: + s=mass_to_protein[round(masses[i]-masses[pred[i]],4)]+s + i=pred[i] +s=mass_to_protein[round(masses[i]-masses[pred[i]],4)]+s +print s + + \ No newline at end of file diff --git a/signed_perm.py b/signed_perm.py new file mode 100644 index 0000000..3d6510c --- /dev/null +++ b/signed_perm.py @@ -0,0 +1,72 @@ +#!/usr/bin/python + +def perm(x,last=0): + if len(x)<=last+1: + yield x + else: + for t in perm(x,last+1): + yield t + for i in range(last+1,len(x)): + x[last],x[i]=x[i],x[last] + for t in perm(x,last+1): + yield t + x[last],x[i]=x[i],x[last] + +def s_perm(x,last=0): + if len(x)<=last+1: + yield x + else: + for t in s_perm(x,last+1): + yield t + for i in range(last+1,len(x)): + x[last],x[i]=x[i],x[last] + for t in s_perm(x,last+1): + yield t + x[last]=-x[last] + for t in s_perm(x,last+1) + x[last],x[i]=x[i],-x[last] + + + + + + +def sgn(x): + if x & 1: + return(-1) + else: + return(1) + + +def signed_perm(x): + m= (01 << (len(x))) + for t in perm(x): + for b in range(m): + s=t[:] + j,k=b,0 + while j>0: + s[k]=sgn(j)*s[k] + j=j>>1 + k+=1 + yield s + + +S=[x for x in signed_perm([1,2,3])] +print len(S) +for x in S: + for i in x: + print i, + print + + + + + + + +def fact(n): + if n==0: + return(1) + else: + return n*fact(n-1) + diff --git a/spec.py b/spec.py new file mode 100644 index 0000000..0527e64 --- /dev/null +++ b/spec.py @@ -0,0 +1,22 @@ +wgts=[] +protein_mass={} +mass_to_p={} +with open("protein_masses.txt","rU") as f: + for line in f: + x=line.split() + protein_mass[x[0]]=float(x[1]) + mass_to_p[float(x[1])]=x[0] + +with open("rosalind_spec.txt","rU") as f: + for line in f: + wgts.append(float(line.strip())) + +s='' +for i,x in enumerate(wgts): + if i==0: + last=x + continue + s+=mass_to_p[round(x-last,5)] + last=x + +print s \ No newline at end of file diff --git a/splicing.py b/splicing.py new file mode 100644 index 0000000..9f285bd --- /dev/null +++ b/splicing.py @@ -0,0 +1,53 @@ +import string +import sys +from collections import OrderedDict + +comp={'A':'T','T':'A','G':'C','C':'G'} +value,key="","" +s=OrderedDict({}) + + +with open("rosalind_splc.txt","rU") as f: + for x in f: + if x[0]!=">": + value=value+x.strip() + else: + if key!="": + s[key]=value + value="" + key=x[1:].strip() + s[key]=value +f.close() + + +rna={} +f=open('rna_table.txt','rU') +for line in f: + x=line.split() + codons=x[0::2] + acids=x[1::2] + rna_new=dict(zip(codons,acids)) + rna.update(rna_new) + +f.close() + + +dna=s.values()[0] + +for value in s.values()[1:]: + + while value in dna: + j=dna.find(value) + t=len(value) + dna=dna[0:j]+dna[j+t:] + +dna=dna.replace("T","U") + +for i in range(0,len(dna),3): + if rna[dna[i:i+3]]=='Stop': + sys.stdout.write('\n') + break + sys.stdout.write(rna[dna[i:i+3]]), + + + diff --git a/sptd.py b/sptd.py new file mode 100644 index 0000000..7175c9d --- /dev/null +++ b/sptd.py @@ -0,0 +1,15 @@ +from nwck_class_2 import Newick_Tree + +with open("rosalind_sptd.txt","rU") as f: + taxa=f.readline().split() + newick_1=f.readline().strip() + newick_2=f.readline().strip() + +t1=Newick_Tree(newick_1) +t2=Newick_Tree(newick_2) + +char1=set(t1.char_table()) +char2=set(t2.char_table()) + +delta=char1.symmetric_difference(char2) +print len(delta) \ No newline at end of file diff --git a/sptyd.py b/sptyd.py new file mode 100644 index 0000000..dcc15b3 --- /dev/null +++ b/sptyd.py @@ -0,0 +1,46 @@ +#computes the "RF" distance between trees s1 and s2 in Newick Format + +from nwck_class_3 import Newick_Tree +#s2='(rat,(dog,cat),(rabbit,(elephant,mouse)));' +#s1='(rat,(cat,dog),(elephant,(mouse,rabbit)));' +#s1='((a,(b,c)),d,e)' + + +s1='(((((((((((Abantias_mirabilis,(Chlidonias_emilia,Iguana_yeltoniensis)),Podoces_hemilasius),(Ameiva_erythronotus,Chelus_lepturus)),Sericinus_guangxiensis),(((((((((Acanthosaura_oenanthe,(((Capella_melonotis,Meles_angustirostris),Ingerophrynus_fernandi),Chlamydotis_euptilura)),Remiz_montela),(((((((Ameiva_pica,(((((Cygnus_chukar,Rhynchaspis_insignis),Erpeton_alterna),Lasiodora_minor),Trapelus_glacialis),Hyla_jaculus)),((((Dipsosaurus_gregaria,((Hottentotta_homeana,Scaphiopus_mystaceus),(Procellaria_platycephala,Underwoodisaurus_stellatum))),Ptyodactylus_cyanochloris),((Hydrochelidon_Jankowskii,Tadorna_monilis),Meles_pardalis)),Micropalama_deminutus)),(Recurvirostra_mitratus,sibiricus_cliffordii)),(Erpeton_sp,Salvelinus_spinifera)),(((Chamaeleo_colubrinus,(Chrysemys_fernandi,Norops_alpinus)),Hyla_aureola),Ketupa_cyanea)),Asthenodipsas_kurilensis),(Hadrurus_trianguligerus,crecca_acanthinura))),((Eryx_sauromates,((Pogona_tricolor,Rosalia_veredus),Turdus_lividum)),Haliaeetus_hyperboreus)),(Bombyx_bairdii,Physignathus_fragrans)),Philothamnus_bairdi),((Anthropoidae_carnivorus,Phalacrocorax_longipennis),((Calidris_eulophotes,(Gekko_hypomelus,Pagophila_personata)),((Circus_pallasii,(Psalmopoeus_veredus,Turdus_bicoloratum)),Nemachilus_breitensteini)))),((Chrysopelea_rosmarus,(Erpeton_calamita,Spalax_corsac)),Pyrrhocorax_siebenrocki)),Pseudemys_pygmaeus)),(Aix_prasina,((((((((((Aix_pugatshuki,Lepidobatrachus_plumifrons),(Dendrelaphis_climacophora,Saxicola_caesius)),(Chalcides_cyanochloris,((Cynops_grus,((Neolycaena_virgo,Thamnophis_diadema),(Python_haliaetus,Tryngites_boschas))),Phelsuma_helena))),Plegadis_sanguinolentus),(Argynnis_equestris,(Coenobita_pulchra,((((Lamprophis_teniotis,Pelodytes_solitaria),(Laudakia_parahybana,Limnodromus_glottis)),(((Pelusios_interpres,(Sus_cyanea,sibiricus_multifasciata)),Rhamphiophis_means),Telescopus_alpinus)),Net_major)))),Lampropeltis_leucoptera),((Alpes_ibis,Lystrophis_murinus),Apalone_heudei)),((Arctomys_coloratovillosum,Salvelinus_fasciata),(Caiman_fulvus,(Chondropython_calligaster,Gyps_pusilla)))),Pandinus_meermani),Tursiops_lopatini))),Passer_gregarius),((Candoia_sujfunensis,Vulpes_fusca),((Fregilegus_cynodon,Otis_grossmani),(Notophthalmus_krueperi,Petrocincla_keyzerlingii)))),Megophrys_cancerides),Carabus_manul),(((((((((((((((((((((((((Abantias_situla,Middendorffinaia_rufinus),(((Acanthis_major,(Selenocosmia_completus,Syrrhaptes_kopsteini)),Seokia_savignii),Bradyporus_miliaris)),(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Acanthis_acanthinura,Balaenoptera_unicus),Paraphysa_canagica),Eumeces_aegyptia),Balaenoptera_nigra),Phasianus_orientalis),(Amphiuma_communis,Teratolepis_nasuta)),(Bombycilla_citreola,Rhesus_gigas)),(Chettussia_medici,Rhacophorus_erythropus)),Butastur_helena),Paramesotriton_pugatshuki),Philacte_dominicus),(Elaphe_lineatus,Salamandra_dentata)),Sturnus_shadini),(((((((Acanthoscurria_graculus,Sorex_scincoides),Rhamphiophis_variabilis),Falco_gallinago),(Enhydris_caucasicus,(Iomachus_arseniavi,Porzana_graeca))),Chondropython_lutris),Accipiter_borealis),((Aegialifes_pictus,Podoces_botnica),(((((Archispirostreptus_javanica,Squaterola_pulchripes),Scolopendra_teguixin),Mergus_purpurascens),Tetraogallus_Bernicla),Natriciteres_clarus)))),(Antaresia_argentatus,(((((((((Cygnopsis_gecko,(Natriciteres_vulpes,Pelodiscus_pardus)),(Falcipennis_teguixin,Fulica_dentatus)),Gonyosoma_geniculata),Sphenops_rudicolis),Rhynchaspis_turneri),Dipsosaurus_uluguruensis),Tropidurus_striatus),Megaptera_tigrinus),Sorex_brongersmai))),((Chlamydosaurus_odoratus,Eulabeia_occitanus),Ctenosaura_rufus)),(((((((((((((((((((((((((((((((((((((((((((((((Acanthis_boa,((((Callipogon_tigris,Haplopelma_hassanica),Tetrao_carbonaria),Eirenis_filipjevi),Oenanthe_subcinctus)),(((((((((Acanthoscurria_hipposideros,((((((((((((((((((((((((((((((((((((((((((((((Accipiter_elegans,((((((((Dipsosaurus_politus,Hadogenes_cianeus),Mochlus_elegans),Minipterus_leucogeranus),Monodon_fulvus),Lepus_exanthematicus),Fulica_insignis),Marmota_avinivi),Gekko_triangulum)),Cypselus_comicus),Acheron_mandarina),(Ambystoma_glutinosus,(Leptobrachium_bukhunensis,Lepus_dignus))),(Avicularia_leucomystax,Eryx_ferina)),(Chondropython_stellio,(Haliaeetus_rudicolis,Iomachus_perdix))),Philothamnus_jaculus),Halichoerus_hipposideros),Lycaenopsis_grossmani),Phrynocephalus_chuatsi),((Ctenotus_tataricus,Phalacrocorax_niloticus),Tadarida_barbata)),Pandinus_rubicola),Tetrao_dendrophila),(((((((Aphonopelma_compactus,Iguana_flavolineata),Gongylophis_taezanowskyi),(Eremophila_cyanogenys,Petrocincla_javanica)),(Balaena_tarda,Xenochrophis_clericalis)),(((((((Callipogon_zenobia,(Ethmostigmus_maihensis,Milvus_dominus)),(Melanocorypha_vastus,Ptychozoon_cambridgei)),(Ctenotus_yeltoniensis,Dendrelaphis_vipio)),Chamaeleo_albertisii),Phrynocephalus_felderi),Oligodon_melanoleucus),Ophisops_heterolepidotus)),Cyriopagopus_nupta),Burhinus_uluguruensis)),Corallus_hodgsoni),(Allactaga_mexicana,Desnana_schokari)),(((Canis_siebenrocki,Strepsilas_rostratus),(Ceratophrys_kazanakowi,Saxicola_cynodon)),Phoca_taxus)),(((((((((Aix_ammon,Platemys_molurus),(Circaetus_venulosa,Teratolepis_monachus)),Psammophis_pulchripes),Glareola_hilarii),Laudakia_albocinctus),Epicrates_weliczkowskii),Rhynchophis_atthis),(Asthenodipsas_battersbyi,Corvus_clypeata)),(((Anas_japonica,((((Calidris_microlepis,(Liasis_comicus,Netta_iankowskii)),(((Chettussia_weberi,Lasiodora_meles),Xenopeltis_regius),Limnodromus_calidris)),(Pyxicephalus_ocellatus,Trachemys_vegans)),Cottus_quadriocellata)),Zosterops_giganteus),Hadrurus_vulpes))),Dendrelaphis_cinereus),Phylloscopus_stagnalis),(((((((Aphonopelma_aspera,Mogera_corsac),((Bombyx_ridibundus,Candoia_zenobia),(Cyriopagopus_rusticolus,Micropalama_naumanni))),Spermophilus_fragrans),(Phrynosoma_australis,Syrrhaptes_monoceros)),(Onychodactylus_maculata,(Pandion_odoratus,Trionyx_graculus))),Fuligula_apus),((Bos_castus,(Chalcides_exquisita,Salmo_albicilla)),(Buthacus_vastus,((Camptoloma_personata,((Chrttusia_maihensis,Pyrgilauda_pica),Corallus_argentatus)),Nemachilus_asperum))))),(Alauda_wislizeni,Mylopharyngodon_paradisi)),(((((((Arctomys_rubida,Chamaeleo_microlepis),Tadarida_dispar),Balaenoptera_leucomelas),(Holaspis_griseus,Parus_modestus)),Tadarida_sinensis),Cyclemys_glaucescens),((Halichoerus_altaica,Ketupa_ornata),(Laudakia_multifasciata,Upupa_auriculatus)))),(Almo_leucogaster,Anolis_emarginatus)),(Telescopus_dexter,Vipera_subcinctus)),Tadorna_albirostris),Tiliqua_vastus),((Alauda_lutra,Elaphe_guangxiensis),((Anthropoidae_arcticus,Columba_emilia),Thecla_pendulinus))),((((Bradypodion_dennysii,Butastur_monorhis),Elaphe_cristatus),Ziphius_auratus),Moschus_crispus)),((Anthropoidae_wumuzusume,Boiga_scripta),((((((Cervus_filipjevi,Rhacophorus_grus),Cynops_intermedia),((Dryobates_tatarica,Totanus_caudata),Tupinambus_middendorffi)),Erpeton_mutabilis),Rhamphiophis_porphyrio),Xenophrys_pallidus))),((((((((((((((((((((((((Acheron_mugodjaricus,((((Archispirostreptus_diadema,(Bombus_salei,Coregonus_cristatellus)),Lystrophis_opimus),Pelusios_himantopus),Hemitheconyx_eremita)),(Oedura_politus,Tylototriton_salamandra)),Elseya_melanuroides),Chamaeleo_climacophora),Zosterops_nelsonii),Corytophanes_leschenaultii),((((((((Almo_saiga,(Bombycilla_maurus,Cyriopagopus_edulis)),Buthus_xanthocheilus),(((((Brachypelma_sieboldii,Chondropython_soloensis),(((Chrttusia_zagrosensis,(Eudrornias_doctus,Nhandu_oenanthe)),Furcifer_verrucosus),Mabuya_pelagicus)),((((Cyclemys_mlokosiewiczi,Vanellus_bedriagai),(Limnodromus_tanganicus,Tamias_tinctorius)),Uroplatus_madagascariensis),(Rissa_oedicnemus,Sorex_heterolepidotus))),(Gypaetus_bonasus,Mogera_krueperi)),Limosa_subrufa)),Coenobita_guttifer),(Fuligula_jaspidea,Limnodromus_taczanowskius)),(Coleonyx_macularius,Sericinus_radiata)),Cyclemys_ceterus),Elaphe_ochropus)),((((((Ameiva_cornix,Zosterops_altaica),Ctenosaura_mexicanum),(((((Aphonopelma_moschata,Hottentotta_decor),(Kinixys_nasuta,Xenochrophis_irregularis)),Pusa_tetrix),Cyriopagopus_leuconotus),(Ciconia_bairdii,Epicrates_rufus))),Argynnis_serpentina),Motacilla_classicus),(Eumeces_vulgaris,Ninox_peregrinus))),Platalea_caelebs),Rufibrenta_botnica),(Enhudra_prasina,Nucifraga_pedo)),((Chrysopelea_rostratus,Synthliboramphus_madagascariensis),crecca_ochropus)),Hemiscorpius_fallax),(Lepidobatrachus_rusticolus,Mabuya_totanus)),Gyps_caudolineatus),Platalea_guttata),((Lasiodora_triangulum,Minipterus_uncia),Osteopilus_torquata)),(((((Alloporus_latiscutatus,Eschrichtius_schneideri),(Tetraogallus_lutra,Tiliqua_carbonaria)),Cottus_terrestris),(Fulica_fuellebornii,Homopholis_cingulata)),Ceratophrys_turtur)),((Corvus_purpurascens,((Megophrys_savignii,Strepsilas_noctua),Micropalama_graculus)),Odobenus_blakistoni)),Sus_anatina),((Ameiva_chinensis,Larus_cioides),Sturnus_eximia)),Upupa_avosetta),Synthliboramphus_hendricksoni),((((Eumeces_rufus,Syrrhaptes_ornata),Hysterocrates_squamatus),Plethodon_meermani),Gecarcinus_indica))),(Gekko_galeatus,Gerrhosaurus_melanostictus)),Bos_sanguinolentus),Streptopelia_chuatsi),(Allactaga_caryocatactes,Eucratoscelus_sauromates)),Sterna_acuta),Castor_fimbriatus),(Eudramias_haliaetus,Tylototriton_casualis)),((((((Antilope_floridana,Capreolus_griseus),Tupinambus_gregarius),Siniperca_fimbriatus),((Certhia_jacksoni,Scolopax_insignis),(Lycodon_fuellebornii,(Mabuya_lividum,Pelusios_nivalis)))),Capeila_Bernicla),((((((Boiga_flavomaculatus,Pleurodeles_rufodorsata),Phasianus_taxus),(((((Budytes_galactonotus,Paraphysa_murinus),Testudo_maldivarum),((Eudrornias_guineti,((Hirundo_schokari,Tetraogallus_geniculata),Mochlus_sagrei)),Lepus_atthis)),((((((Chelus_bifasciatus,(Cygnus_aceras,Pseudemys_dendrophila)),Crotaphytus_botnica),(Phrynohyas_mystacinus,Querquedula_moschiferus)),Underwoodisaurus_crucigera),(Chelydra_purpurascens,Ruticilla_collaris)),Chlidonias_arizonensis)),Lamprophis_tatarica)),Kassina_czerskii),(Hydrosaurus_chamaeleontinus,Turdus_laevis)),(Bombina_fissipes,Larus_zonata)))),(Chelus_wogura,Tryngites_fluviatilis)),Hydrosaurus_zonata),Cottus_vastus),(((((Aphonopelma_argentatus,Ephibolus_aegagrus),((Gonyosoma_vertebralis,(((Iomachus_pictus,Saxicola_albicilla),Spalax_brevirostris),Ursus_vipio)),Mustela_rhymnus)),Pyxicephalus_albirostris),(Homopholis_eximia,Philacte_vulpes)),Melanocorypha_giganteus)),((((Alpes_maihensis,(Aythya_montela,Kinixys_similis)),(Chlidonias_rutilans,Phrynocephalus_subrufa)),(Eirenis_smithii,Ophisops_guttifer)),Pituophis_deminutus)),Pyrgilauda_hemilasius),Eucratoscelus_musicus)),Rhombomys_squaterola),(Acanthoscurria_trigonopodus,Hyla_deserti)),((Ardea_torquata,Thamnophis_sibiricus),(Capella_tolai,Heteroscodra_valliceps))),Rissa_bimaculata),Dendrelaphis_horridum),Scaphiophryne_nasicus),((((((((Citellus_rubida,crecca_hemilasius),(Gazella_dactylisonans,((Leiopython_livia,Paraphysa_fuliginosus),Tetrao_alcinous))),Squaterola_bengkuluensis),(Neolycaena_riparia,Pedostibes_infrafrenata)),Salamandra_korschun),(Limnodromus_milii,Motacilla_sepsoides)),(Corallus_aureola,Iguana_mlokosiewiczi)),Pyrgilauda_leucogeranus)),(Allactaga_medirostris,((Boiga_plathyrhychos,(Eudrornias_aegyptia,Ortigometra_ferina)),Kaloula_sujfunensis)))),Squaterola_unicolor),(Procellaria_atriceps,Python_melleri)),((((Aix_americanus,(Eudrornias_subcinctus,Hydrosaurus_breitensteini)),Tylototriton_diffidens),(Ephibolus_standingii,Odonthurus_sanguinolentus)),Bradyporus_docilis)),(((Alauda_brachydactyla,Homopholis_taczanowskius),(Hysterocrates_leucoptera,Phrynosoma_caerulea)),Sturnus_glacialis)),(((Buteo_tentaculatum,Dendrelaphis_mlokosiewiczi),Saxicola_hirundo),Pusa_brevipes)),(((((((Anodonta_hongkongensis,Terpsihone_diadema),Odobenus_situla),Oxyura_caucasicus),Corallus_caudata),(((Dryobates_completus,(Gazella_docilis,Hottentotta_caryocatactes)),Homopholis_purpurascens),Gonyosoma_valliceps)),(Anolis_chinensis,Vormela_sp)),Psalmopoeus_mysticetus)),Rissa_avinivi),Brachyramphus_lavaretus),Gazella_gibbosus),Pyrrhocorax_marinus),Bradypodion_anatina),Argynnis_cranwelli),Acanthis_calligaster),(Eubalaena_sanguinolentus,((Falco_bedriagai,Monachus_oedicnemus),Vanellus_clericalis))),(((Capella_macularius,(Nyctixalus_leucopsis,Phormictopus_aleutica)),Pachytriton_turtor),Lamprophis_glareola)),(Bradypodion_sibilans,((((Chlamydosaurus_plathyrhychos,Lyrurus_bicinctores),Phoca_ichthyaetus),(Gyps_deminutus,Hysterocrates_proteus)),Poephagus_belliana))),Petrocincla_lagopus),Apodora_stylifer),Bradyporus_fulvus),Spalax_avosetta),Syrrhaptes_vanellus),Platalea_vitulina),(Anas_equestris,Xenophrys_jaculus)),Phyllopneuste_calyptratus),((Chrysopelea_garulla,sibiricus_temminckii),Nipponia_bengkuluensis)),(((Certhia_ibera,(Rhodostethia_naumanni,Triturus_triangulum)),Rhodostethia_avocetta),Ctenotus_sauritus)),Tursiops_sp),((Anodonta_cristatus,Bradypodion_dispar),(Leiopython_kraepelini,Nerodia_hasselquistii))),Asthenodipsas_weberi),Capella_indica),Margaritifera_vermiculatus),Aythya_lutris),(Pareas_galeatus,Porphyrio_marmoratus)),(Androctonus_interiorata,Lepus_auriculatus)),((Hysterocrates_altaica,Plethodon_davidiana),Ursus_leporosum)),Acanthosaura_papuana),(((Acheron_taczanowskius,(Mergus_mlokosiewiczi,Rhesus_milii)),Underwoodisaurus_onocrotalus),Siniperca_opimus)),((Arenaria_parvus,Net_albigula),Querquedula_coturnix)),Anthropoidae_pallasii),Remiz_buccata),(((((Corvus_collaris,(Holaspis_gebleri,Sceloporus_punctatus)),Saiga_chrysaetos),Porphyrio_monilis),Parabuthus_physalus),Rufibrenta_subrubrum)),Lasiodora_guttifer),(((Acanthoscurria_caudicinctus,(((((Apalone_caeruleus,Nyctixalus_ussuriensis),(Paradoxornis_prasina,Ruticilla_Jankowskii)),Pituophis_aegyptia),Leiurus_sanguinolentus),Pogona_arenarius)),Mochlus_leucoryphus),Rhacodactylus_spinifera)),Anodonta_minutus),(((((((((((((Acanthoceros_enhydris,Carabus_tinnunculus),Acipenser_pedo),((((((((((((((((Acanthogonatus_wumuzusume,Grampus_ammon),Theloderma_salei),Ursus_adamsii),Vulpanser_dorsalis),(Anas_rufina,Selenocosmia_calligaster)),(((Bubulcus_clypeatus,Lutra_cyanus),Eudramias_paradisi),(Dasypeltis_getula,((Pelusios_proteus,Synthliboramphus_oenanthe),Xenochrophis_baeri)))),Circus_korschun),Rhacophorus_imperator),Pachytriton_franckii),(((((((((((Aegialifes_mlokosiewiczi,((((Amphiuma_cranwelli,Eucratoscelus_fernandi),Castor_nelsonii),Pagophila_parvus),Rissa_macularius)),Carabus_vastus),Cygnopsis_ibera),(Camptoloma_taeniura,Circaetus_odoratus)),Hottentotta_sebae),Glareola_perdix),Eucratoscelus_peregrinus),Eubalaena_eremita),Gazella_montela),Apodora_bedriagai),((((Allactaga_glaucescens,(Capreolus_walti,Emberiza_xanthocheilus)),(Bradypodion_barroni,(Pelodytes_insignis,Physignathus_hyemalis))),Sceloporus_cancerides),Pterinochilus_pallidus))),Spalerosophis_fasciolata),Basiliscus_nivicola),Mabuya_modestus),Chrysemys_gecko),Balaenoptera_marcianus),Philothamnus_melanostictus)),(Grus_fulvus,((Nyctixalus_oenanthe,Saga_cancerides),Passer_carolinensis))),(((Alaus_semipalmatus,((((Balaena_ferina,Pedostibes_smaragdina),Paramesotriton_aceras),Lampropeltis_cyanogaster),Ketupa_mutabilis)),Osteopilus_moschata),((((Alloporus_collybitus,(Lamprophis_manul,Lycaenopsis_kopsteini)),Hydrochelidon_lividum),(Anodonta_deminutus,Antaresia_schneideri)),(((Branta_casualis,Pareas_subniger),Chondropython_gecko),(((Branta_erythronota,Sturnus_laevis),Grampus_cachinans),Chen_serricollis))))),(((((((((((((((Agama_vertebralis,Kinosternon_grandis),(Mylopharyngodon_glottis,Tetrao_doctus)),Latastia_chuatsi),Avicularia_insularis),(((Coenobita_grossmani,Cuculus_wislizeni),Larus_naumanni),Oligodon_insularis)),(Camptoloma_carnivorus,((Chrysemys_maldivarum,(Falco_dominicus,(Geochelone_collaris,Ziphius_minor))),Perdix_virgo))),((((((((((((((((((((((Alectoris_coelestis,Eudramias_indica),Lyrurus_similis),Oceanodroma_chrysargos),Pseudemys_manul),Chelus_maritimus),Rhodostethia_giganteus),(Aythya_melonotis,(((Eryx_arvensis,Rhabdophis_calligaster),Halichoerus_xanthocheilus),Nipponia_tetrax))),Sus_tigrinus),(Ameiva_lutra,Gypaetus_oxycephalum)),Bombyx_sibilans),(Boiga_tricolor,Machetes_oxycephalum)),(Litoria_venulosa,Theloderma_coelestis)),(((Chrttusia_rhymnus,Nhandu_nivicola),Heteroscodra_fimbriatus),Pseudemys_galericulata)),(Brachypelma_clericalis,Nyctaalus_platyrhinos)),Philomachus_vanellus),Chelus_lineatus),Teratoscincus_tatarica),Sturnus_hungaricus),Pyrgilauda_kazanakowi),Citharacanthus_reticulatus),((Nemachilus_picta,Querquedula_amboinensis),Tupinambus_oenanthe)),((((((((Anodonta_corone,Cinclus_caudolineatus),Bombyx_korschun),(Madagascarophis_carbonaria,(Megaloperdix_sanguinolentus,Nyctixalus_flavirufa))),Enhudra_albocinctus),Perdix_paganus),(Phasianus_cristatella,Scolopax_sanguinolentus)),Neolycaena_carinatus),Aplopeltura_fasciata))),(((((Elaphe_acanthinura,Sphenops_zagrosensis),Tetraogallus_adamsii),Nemachilus_angustirostris),Scolopendra_nigrolineatus),((Hydrosaurus_meles,Philothamnus_sp),Mabuya_atthis))),(Alectoris_auriculatus,(Pterinochilus_saxatilis,Ptyodactylus_atrigularis))),Epicrates_variabilis),(Alaus_battersbyi,Archispirostreptus_viridis)),Grammostola_africanus),Balaenoptera_grossmani),Almo_classicus),Rissa_franckii)),(((((Allactaga_bengalensis,Trachemys_caeruleus),Anodonta_helvetica),Regulus_crispus),(Apus_zagrosensis,Phasianus_variabilis)),Amphiuma_tadorna)),Monodon_cingulata),Cuora_climacophora),Ruticilla_lehmanni),((Cyriopagopus_dennysii,crecca_guentheri),(((Lampropeltis_rudicolis,Lystrophis_interpres),Natriciteres_bukhunensis),Ptychozoon_franckii))),(Cyclagras_gobio,Marmota_lutris)),Avicularia_strepera))),Apalone_arseniavi),Tupinambus_mystaceus),Pelomedusa_albocinctus),((((((((((((((((((((((((((Allactaga_arcticus,Bufo_glareola),Sorex_angustirostris),Phalacrocorax_cliffordii),Leiopython_tenuirostris),Bombycilla_pyromelana),(Ctenotus_fuliginosus,(Cygnopsis_mystacinus,(Geochelone_stagnalis,(Otis_garmani,Vipera_perrotetii))))),Lobipes_tenuirostris),(((((((((Anthropoides_weliczkowskii,Streptopelia_rupestris),((((Bombina_middendorffi,Haplopelma_alcinous),Hadogenes_plumifrons),Psammophis_dactylisonans),(Oxyura_fiber,Recurvirostra_salvator))),Chettussia_vertebralis),(Chamaeleo_femoralis,Ptyodactylus_standingii)),Saxicola_helena),(((Eunectes_hasselquistii,Norops_aegagrus),Heterodon_bicoloratum),Nemachilus_pusilla)),(((Canis_tigrinus,Varanus_tatarica),Hemitheconyx_fasciolata),Megaloperdix_casualis)),(((Babycurus_agama,Epicrates_piscator),(((Buthacus_naumanni,Sterna_difficilis),Gonocephalus_pelagicus),Pelodiscus_leptochelis)),Bos_terrestris)),Thymallus_galactonotus)),((Bronchocela_dorsalis,Glareola_septentrionalis),Regulus_colubrinus)),Dyscophus_angustirostris),((Ceratophrys_pelagicus,Thymallus_argali),Emydura_melleri)),Damon_scrofa),Philomachus_cavimanus),(Haliaetus_constricticollis,Phrynocephalus_godlewskii)),Lyrurus_pardus),((Dafila_sirtalis,((((Hadogenes_alpina,Pseudemys_doctus),Limnaeus_edulis),Hysterocrates_brachydactyla),Mabuya_gemmicincta)),Trionyx_serricollis)),Bronchocela_mandarina),(Cyclagras_karelini,Phalaropus_tarda)),Apalone_anachoreta),Bufo_communis),Bronchocela_tatarica),(Balaenoptera_terrestris,Eudrornias_marcianus)),(((Argynnis_amboinensis,(Argynnis_krueperi,Mergus_dubius)),((((((Bombina_capra,Coleonyx_mandarina),Diomedea_himalayanus),Upupa_glottis),(Calidris_margaritifera,((Chrttusia_temminskii,Psalmopoeus_salvator),Sceloporus_medici))),Triturus_orientalis),Citellus_dahurica)),Saxicola_emarginatus)),Moschus_carolinensis),(Leptobrachium_glutinosus,Scincus_govinda)),Pica_blakistoni)),Falcipennis_africanus),(((Aegypius_ridibundus,((Allactaga_rubicola,(Emydura_emilia,Squaterola_gordoni)),Lobipes_mackloti)),(((((Alaus_arizonensis,(Lobipes_kuhli,Tadarida_semipalmatus)),(Calotes_blythi,Scaphiophryne_fernandi)),Rhynchaspis_bellii),((((((((Callipogon_ceterus,Coleonyx_martensi),Thamnophis_percnopterus),Fregilegus_collectivus),Vanellus_monoceros),Cyclemys_gregarius),Testudo_scalaris),Spermophilus_dulkeitiana),Hydrochelidon_fiber)),Anodonta_gratiosa)),Antilope_rufina)),Callipogon_deremensis),(((Apodora_guttata,Boa_physalus),(Turdus_mycterizans,Zosterops_terrestris)),Hadrurus_barbatus)),((Agama_mirabilis,Anolis_leucoptera),((Coturnix_quadrivirgata,Haplopelma_melonotis),Nipponia_bicinctores))),(Moschus_mysticetus,Telescopus_saxatilis)),Phalacrocorax_squamatus),Dipsosaurus_colubrinus),((Kinosternon_multifasciata,Sterna_tetrax),Rhodostethia_tataricus)),Butastur_rubida),Trachemys_grunniens),((Bombyx_gordoni,(Gallinago_gemmicincta,Trachemys_scabra)),((((Cuora_reinwardti,Gallinago_zagrosensis),Phalacrocorax_situla),Damon_radiata),Pelecanus_corone))),((((((((((((((((((((Acanthogonatus_sinensis,(Madagascarophis_mexicana,Osmoderma_getula)),Anthropoidae_conicus),Arctomys_ochropus),(Bombycilla_apollo,(Dyscophus_aureostriata,Elaphe_dione))),Phelsuma_troglodytes),((((((Bos_rapax,Falco_guangxiensis),Cervus_nigropalmatus),Lasiodora_tigrinus),Phyllopneuste_colchicus),Crotaphytus_interiorata),((Dipus_serpentina,Rhesus_standingii),Triturus_timidus))),Teratolepis_armata),(((((((((Ahaetulla_turtor,((Boa_ferrumequinum,Hirundo_borealis),Bronchocela_avocetta)),((((((((((((Apus_prominanus,(Leiolepis_turneri,Osmoderma_flava)),Rhacophorus_australis),(Lystrophis_canus,Neolycaena_subminiatus)),Poephagus_veredus),Sitta_mackloti),Burhinus_lehmanni),(Budytes_miliaris,(((Cuon_meermani,Holodactylus_plumipes),((Dipus_moschiferus,Sphenops_temminskii),Phalaropus_galeatus)),(Milvus_gibbosus,Sitta_ferox)))),Gerrhosaurus_chuatsi),((((((((Chelydra_vertebralis,Parnassius_longicollis),Euspiza_salamandra),Macrorhamphus_nigriceps),(Cuon_jaspidea,Opheodrys_leucoryphus)),Minipterus_buccata),Crotaphytus_major),Underwoodisaurus_hardwickii),((Pseudorca_monorhis,Tadarida_fusca),Vulpanser_chrysaetus))),Grus_dubius),(Carabus_teniotis,Ziphius_borealis)),Hydrochelidon_maurus)),Tursiops_nippon),Norops_lutris),Bradyporus_nigriceps),(((((Cervus_celeber,Hadrurus_placidus),Mustela_unicolor),(Desnana_schrencki,Limnaeus_tarda)),Oxyura_lehmanni),Phrynocephalus_himalayensis)),Fuligula_albicilla),Capeila_kingii),Vulpes_duplex)),((Anodonta_pica,((Cuculus_ibera,Cuora_elaphus),Ursus_aspera)),(((Emberiza_avosetta,Pituophis_lasiopterus),(Perdix_corticale,Uncia_hypomelus)),Gyps_oedicnemus))),(Capreolus_cianeus,(((Castor_rufina,((((Chettussia_tuberculosus,Eremophila_altaica),Rangifer_similis),Plegadis_eximia),(Gerrhosaurus_ussuriensis,(Philomachus_exquisita,Ptychozoon_lobatus)))),Pyrrhocorax_glottis),Certhia_irregularis))),(((((((((Actitis_geyri,(Eubalaena_lineatus,Psalmopoeus_bicoloratum)),Telescopus_alcinous),((((Chrysemys_enhydris,Emberiza_vulgaris),Xenopeltis_hemilasius),Phrynomerus_carinata),Mylopharyngodon_cornix)),sibiricus_cyanochloris),(Capra_pygmeus,Pelomedusa_bedriagai)),Castor_dahurica),((Bronchocela_alpinus,Chrttusia_pygmeus),Leiolepis_nupta)),Atrophaneura_albicilla),(Archispirostreptus_maurus,Phrynops_fuscatus))),(Chelydra_meermani,Circaetus_erythronotus)),(Eudrornias_semipalmatus,Pusa_notaeus)),Mylopharyngodon_argentatus),(Hirundo_leucorodia,Pituophis_oxycephalum)),Spizaetus_sanguinolentus),Dipus_catenifer),(Anas_maculatum,Heterodon_serricollis)),((Leptopelis_sphenocercus,Vipera_temminckii),Ninox_haliaetus)),Buthacus_musculus)),Cyclemys_turneri),(((Acanthosaura_eburnea,(((((((((((((Actitis_clypeatus,(((((((((((((((((Aegialifes_communis,Monticola_apollo),Callipogon_iankowskii),Balaena_crispus),(((((Anolis_sibirica,(Dahurinaia_ovata,Morelia_arenarius)),Bombina_hilarii),Recurvirostra_carbonaria),Prunella_mutabilis),Rhabdophis_comicus)),Pseudorca_gallicus),Paradoxornis_korschun),Bradypterus_intermedia),Colaeus_leptochelis),Tadarida_kraepelini),Tupinambus_ruficollis),((Balaenoptera_leucoryphus,(Calotes_pachypus,Monachus_erythropus)),(Fulica_leucoptera,((Hydrochelidon_irregularis,(Mochlus_kingii,Nerodia_tolai)),Lagenorhynchus_circia)))),((((Almo_leuconotus,(Balaena_geyri,((Burhinus_fernandi,Selenocosmia_nasuta),((Eutamias_occitanus,Lepus_heliaca),(Leiurus_infrafrenata,Pusa_epops))))),(Chrttusia_venulosa,Osmoderma_breitensteini)),Coenobita_hypomelus),Spalerosophis_gecko)),Chlamydosaurus_boulengeri),(Anthropoidae_scincus,Odobenus_epops)),(Chelydra_situla,Ctenosaura_tadorna)),Damon_rapax),Rangifer_dulkeitiana)),((Argynnis_cynodon,Glareola_vulgaris),Grus_alba)),Platemys_circia),(((Brachypelma_crassicauda,(((((Dendrelaphis_calamita,(Pareas_plathyrhychos,Streptopelia_armeniacus)),Nyctaalus_gebleri),Lampropeltis_clinatus),Podoces_subrufa),Himantopus_celeber)),Iguana_perdix),(Chelodina_canus,(Emydura_ochropus,sibiricus_porzana)))),Columba_hypoleucos),Gypaetus_hendersoni),(Lycaenopsis_godlewskii,Parabuthus_torquata)),Asthenodipsas_sphenocercus),Margaritifera_ferina),Pseudemys_clarus),(Ctenosaura_lagopus,(Dyscophus_azureus,Picus_cachinans))),(Mabuya_heterolepidotus,Zosterops_perrotetii)),Falco_pardalis)),Gecarcinus_vertebralis),((Acipenser_eremita,(Machetes_albertisii,Spalax_leuconotus)),(Arenaria_miliaris,Ninox_longicaudata)))),Ctenotus_decor),Rhynchophis_orientalis),(Acipenser_ameiva,Aphonopelma_taczanowskius)),(Lutra_caninus,Osmoderma_plathyrhychos)),Cuculus_enydris),Bradypterus_ciliatus),Hemiscorpius_argali),(Cervus_cyanochloris,Megaloperdix_marcianus)),Aegialites_colchicus),Larus_Anas),Bradypodion_avocetta),((((((((((((Citellus_teguixin,Hydrosaurus_krueperi),Riparia_mlokosiewiczi),(Leiurus_cyanus,Myotis_constricticollis)),Iguana_czerskii),Xenochrophis_unicus),Panthera_castaneus),Ortigometra_aegyptia),Recurvirostra_punctatus),Monticola_terrestris),Eremophila_imperator),Leiocephalus_rosmarus),Scolopendra_armeniacus)),((((Boa_japonensis,(Nyctixalus_pachypus,Salamandra_sujfunensis)),Chelodina_versicolor),Terpsihone_tatarica),Regulus_arizonensis)),Onychodactylus_similis),((((((((((Aegialites_montela,Sceloporus_albirostris),(Monticola_pygmaeus,Parnassius_paradisi)),Ctenotus_quinquestriatus),(Gekko_carnifex,Nucifraga_franckii)),Ovis_africanus),Eumeces_amethistina),(Arenaria_communis,Gerrhosaurus_glaucescens)),Minipterus_molurus),((Androctonus_cliffordii,Mesoplodon_turneri),Gambelia_virgo)),((Apodora_enydris,Ziphius_varius),Dasypeltis_rostratus))),(Agama_sagrei,(Archispirostreptus_weberi,Grammostola_adspersus))),(((((((((Acanthosaura_bonasus,((Buthus_virgo,Sturnus_gregaria),((((Oligodon_politus,(Pandion_lutris,Rissa_lutris)),Selenocosmia_aleutica),Pusa_americanus),Tursiops_percnopterus))),Aix_leucotus),(Balaena_macrops,Vormela_scalaris)),Rhodostethia_dactylisonans),((((((((Bradyporus_fuscatus,((Calidris_giganteus,Oenanthe_torquatus),Totanus_amethistina)),Homopholis_leporosum),Chettussia_aestivus),(Hottentotta_melonotis,Testudo_albicilla)),Phalacrocorax_chamaeleontinus),Phyllopneuste_albatrus),Cuculus_irregularis),Grampus_fragrans)),Numenius_salvator),Sterna_japonica),Phasianus_aspera),((((((((((Alcedo_scincoides,Sphenurus_wumuzusume),Cottus_azureus),Himantopus_rufina),(Otis_leucorodia,Terpsihone_cocincinus)),(Bos_prasina,Fregilegus_glacialis)),Madagascarophis_euptilura),Querquedula_blythi),Laudakia_scalaris),(Dahurinaia_scincoides,((Eumeces_aeruginosus,Rhodostethia_garmani),Sterna_vereda))),Eudramias_nebrius))),(((Chrttusia_sauromates,((Ctenosaura_maritimus,Salmo_borealis),(Cuora_leucoryphus,Salvelinus_nigrolineatus))),Net_cavirostris),Osmoderma_filipjevi)),((((Babycurus_ferrumequinum,Himantopus_floridana),Remiz_tridactylum),Elaphe_indicus),Holodactylus_vertebralis)),Parus_aeruginosus),(((((Antilope_hosii,Xenochrophis_armata),Caiman_subruficollis),Lamprolepis_piceus),(Dipsosaurus_docilis,Perdix_prasina)),Lagenorhynchus_platycephala)),Scaphiopus_means),(Leiolepis_plumifrons,Rhinolophus_sinensis)),Pleurodeles_vulpes),((Heteroscodra_arizonensis,Mochlus_guttifer),Pedostibes_sibirica)),Buthacus_keyzerlingii),(Cuon_armeniacus,Pandion_diffidens)),Vormela_vastus),Sorex_ceterus),(Branta_radiata,(Eutamias_elegans,Lampropeltis_lesueurii))),(((((((((((((Accipiter_modestus,Camptoloma_plathyrhychos),(((Chettussia_marmorata,Desnana_eulophotes),((Chrysopelea_elaphus,Holodactylus_aeruginosus),(Saxicola_spaldingi,Squaterola_davidiana))),Trachemys_politus)),Chrysemys_fulvus),Eulabeia_flavigularis),((Brachyramphus_tentaculatum,Scolopax_monachus),Pica_subrufa)),(Burhinus_aristotelis,Rufibrenta_paganus)),Net_maculatum),(Ceratophrys_eburnea,Polypedates_deminutus)),(Lepidobatrachus_completus,Pseudorca_citrsola)),(((((((((Agama_japonensis,Vipera_teniotis),(((((Castor_vittatus,(Chlamydosaurus_taezanowskyi,Leiopython_miliaris)),Hyperoodon_subniger),(Gallinago_xanthocheilus,Ninox_avicularia)),(Castor_vulpes,Phrynosoma_lividum)),Eubalaena_arcticus)),Ortigometra_bimaculata),((Athene_flavescens,(Haplopelma_hemilasius,Scolopendra_veredus)),Certhia_sibiricus)),Liasis_purpurascens),Rissa_hyperboreus),Nhandu_macrops),Syrrhaptes_kazanakowi),Grammostola_maldivarum)),Squaterola_diffidens),Chalcides_vittatus),(((Boiga_dione,Parnassius_rutilans),Chlamydotis_cyanogaster),Philothamnus_taeniura))),Aythia_uluguruensis),((Ketupa_himantopus,Phormictopus_madagascariensis),Scolopendra_hemionus)),(((Alloporus_plathyrhychos,((Citellus_armeniacus,Tupinambus_maculata),Phrynomerus_microlepis)),Castor_molurus),(Bradyporus_haliaetus,Chelodina_ion))),Ophisops_turtur),(Aquila_dispar,(((Bradypodion_perrotetii,Vormela_graeca),((((((Burhinus_politus,Holaspis_auriculatus),Parnassius_scrofa),Telescopus_cioides),Rhabdophis_pulchripes),((Chrttusia_insignis,Leiolepis_cristatus),Trionyx_murinus)),Eremophila_gallicus)),Capeila_guentheri))),(Porphyrio_colubrinus,Saga_guttifer)),((((((Eubalaena_lagopus,Gyps_subruficollis),Leiocephalus_canagica),Phrynocephalus_jacksoni),Neolycaena_galeatus),Podoces_sepsoides),Sterna_brachydactyla)),(((((Alopex_leporosum,Vanellus_pygmaeus),((Coregonus_giganteus,((Pandinus_macrops,Squaterola_albigula),Selenocosmia_australis)),Cyclemys_saxatilis)),((Balaenoptera_lepturus,Gekko_helvetica),((Budytes_jaculus,((Buthus_stimsoni,Middendorffinaia_vermiculatus),Hirundo_ammon)),Eutamias_moschata))),Caiman_modestus),Eubalaena_leucomystax)),Acanthosaura_vipio),Equus_stagnalis),Moschus_atrigularis),((((((((((((((Accipiter_scincoides,(Allactaga_minutus,Marmota_oedicnemus)),Hemitheconyx_hispida),((((Bombyx_clarus,Haplopelma_aeruginosus),Leiopython_geniculata),Chrysopelea_caudatus),Osmoderma_pachypus)),Vanellus_cyanus),(((((Falcipennis_castus,(Phormictopus_decorus,Tropidurus_noctua)),(((Kaloula_classicus,Myotis_bifasciatus),Salamandra_torquatus),Squaterola_cambridgei)),Lobipes_caesius),Scolopendra_triangulum),Seokia_plumifrons)),Python_graeca),Zosterops_gordoni),((Calidris_blakistoni,(Erpeton_fluviatilis,Vormela_quadrivirgata)),Hemiscorpius_corticale)),(Chlamydotis_salamandra,Pyxicephalus_cancerides)),Leiolepis_teniotis),Phrynohyas_himantopus),(Capra_mexicanum,Iguana_caryocatactes)),Natriciteres_radiata),Arctomys_gallinago))),(Aix_noctua,Corytophanes_avinivi)),Theloderma_hirundo),(((Dahurinaia_cinereus,Gecarcinus_minor),Spermophilus_crucigera),(((Kassina_indicus,Ursus_ammon),Scaphiophryne_carinatus),Upupa_fluviatilis))),(((((((Acanthis_celeber,Monachus_indicus),Eutamias_ichthyaetus),(Bronchocela_pardus,Heterodon_ochropus)),(Nyctaalus_walti,Pachytriton_hilarii)),((Accipiter_nivicola,(((Aegialifes_rufodorsata,Kinixys_dennysii),(((((Apus_major,(Ctenosaura_schneideri,((Cygnus_mutabilis,Tiliqua_zagrosensis),(Natriciteres_lesueurii,Phalaropus_pardus)))),((((Certhia_nivicola,(Erpeton_exquisita,Leptopelis_nivicola)),(Hyla_femoralis,Lanius_tetrax)),(((((Ciconia_alcinous,((Citharacanthus_angustirostris,Haliaeetus_haliaetus),Uroplatus_agama)),Iomachus_arvensis),Philomachus_leucocephala),Eubalaena_amboinensis),Phormictopus_leucotus)),Tursiops_obsoleta)),((Budytes_hendersoni,Gallinago_pyromelana),Teratoscincus_bengalensis)),((((Arenaria_aspera,(Casarca_crocodilus,Lasiodora_savignii)),(((Cyclemys_mitratus,Eutamias_margaritifera),Tropidurus_labiatus),Pterocles_crocodilus)),Streptopelia_jubata),Budytes_eburnea)),(Colaeus_moschiferus,Vulpanser_mlokosiewiczi))),Oxyura_dubius)),Phylloscopus_falcipennis)),((((((((((((((((((((((((((Acanthogonatus_porphyrio,(Pseudorca_bengkuluensis,Pyrgilauda_catenifer)),((((Aegialifes_pholeter,(Columba_canus,Minipterus_cristatella)),Lycaenopsis_boschas),(((Emberiza_nebrius,Parnassius_crispus),(Osteopilus_troglodytes,Saga_jacksoni)),Lepidobatrachus_arizonensis)),Rissa_ochropus)),Scaphiopus_caninus),((((((((Alloporus_smithii,Capella_subniger),(Cervus_ulikovskii,Hirundo_japonica)),Remiz_cingulata),Capreolus_bairdii),Cynops_hyemalis),Pedostibes_daurica),(Salamandra_flava,Strepsilas_tinnunculus)),Philomachus_porzana)),(Epipedobates_ridibundus,Vipera_rutila)),((Dasypeltis_collectivus,Net_chamaeleontinus),Equus_circia)),Teratolepis_vitticeps),Capreolus_flavolineata),Kaloula_oenanthe),(Eschrichtius_lasiopterus,Pelusios_leptochelis)),((((((((((((Acheron_vipio,Phrynops_godlewskii),((Alcedo_caeruleus,Mustela_nelsonii),Vormela_vitulina)),((Epipedobates_circia,Limnodromus_guttifer),Megaloperdix_clypeatus)),((Bradypodion_naumanni,crecca_flammea),Kinixys_solitaria)),Odonthurus_ciliatus),((Apodora_eremita,(Felis_paradoxus,Polypedates_scrofa)),((Balaena_pulchra,(Scolopendra_pygmaeus,Ziphius_citrsola)),(Bronchocela_cavimanus,Phrynops_clericalis)))),((Bombus_celer,Monodon_albopillosum),Ovis_fimbriatus)),(Corvus_radiata,(Ortigometra_adspersus,Pratincola_medici))),((((((((((((((((((((Actitis_bicinctores,((Anas_molurus,(((Buthacus_gibbosus,((Emydura_nupta,Eucratoscelus_korschun),Heterodon_cynodon)),Chelus_papuana),Plethodon_doctus)),(((Eryx_tigris,Uncia_riparia),Ingerophrynus_kopsteini),Falco_gebleri))),Pachytriton_murinus),((Gavia_spilota,Morelia_catenifer),Thecla_deserti)),(((((((((((((((Ahaetulla_epops,(((((((Allactaga_caudata,Pachydactylus_japonica),Lepidobatrachus_mongolica),Grus_plathyrhychos),((((((((((Antilope_holbrooki,Sus_anser),Castor_rubida),(Boa_kurilensis,Pleurodeles_colombianus)),Leiocephalus_labiatus),Rhacodactylus_graculus),(Eurynorhynchus_isabellina,Ptychozoon_albatrus)),Lamprophis_giganteus),Homalopsis_perrotetii),Coenobita_punctatus),Cygnus_spinifera)),Grampus_coloratovillosum),(Bombyx_leucogeranus,Furcifer_medici)),Argynnis_oenanthe)),Psalmopoeus_prasina),((Gekko_apus,Gyps_scincoides),Tadorna_pholeter)),Fuligula_difficilis),Platalea_viscivorus),(((Anthropoides_shadini,(Fulica_scutulata,Ophisops_sinensis)),(((((Balaena_fragrans,Bombyx_picta),Chalcides_miliaris),Leiolepis_nipalensis),Phasianus_piceus),Felis_pyromelana)),Dahurinaia_amboinensis)),Phrynops_venulosa),Apus_regius),((((Fulica_hilarii,Recurvirostra_galeatus),Plegadis_hendricksoni),(Pelodytes_martensi,(Tryngites_javanica,Tupinambus_nigrolineatus))),Leiopython_trianguligerus)),Rhacophorus_sanguinolentus),Chrysemys_glareola),Strepsilas_totanus),Corvus_taxus),Natriciteres_viscivorus),Mylopharyngodon_mystaceus)),Hirundo_aleutica),Apodora_cygnus),Diomedea_rostratus),(Aegialifes_ridibundus,(Dasypeltis_ciliatus,Melanocorypha_erythronota))),(((((((((((Aegypius_castaneus,Sceloporus_borealis),Pandinus_eburnea),((Calidris_proteus,Pyrrhocorax_dispar),Sorex_insularis)),((Cyriopagopus_novaeguineae,Eschrichtius_aspera),Hydrochelidon_paganus)),((Hadogenes_odoratus,Siniperca_parvus),Phrynocephalus_pygargus)),Lyrurus_arenarius),Grammostola_pelagicus),Arenaria_ciliatus),Eunectes_clypeatus),((((((((((((Agama_tadorna,Homopholis_wumuzusume),(Amphiuma_pugatshuki,Dahurinaia_naumanni)),((Buthacus_aceras,Gerrhosaurus_taxispilota),Philacte_leucopsis)),Cervus_hyemalis),Scaphiophryne_ibera),Damon_vitticeps),Melanocoryhpa_ridibundus),Meles_glottis),(Coleonyx_minutus,Hyla_mnemosyne)),(((((Alauda_mutabilis,((Aphonopelma_leporosum,(Kinixys_clarus,Litoria_pygargus)),Aquila_guineti)),Boa_pygmeus),Balaenoptera_unicolor),Cyclagras_bengkuluensis),Felis_corsac)),Hadrurus_insularis),((Capella_riparia,Python_decorus),((Hemitheconyx_nigropalmatus,Pusa_constricticollis),Testudo_helvetica)))),Teratolepis_bicinctores)),Hadrurus_gratiosa),(Dendrobates_vipio,Nemorhaedus_gobio)),((Ambystoma_horridum,Phrynocephalus_rufus),Latastia_carolinensis)),Cervus_milii),Sphenurus_gemmicincta),((Babycurus_lobatus,Ovis_cristatellus),Pratincola_caelebs)),((((Anthropoidae_kurilensis,(((((Avicularia_sinensis,Physignathus_tricolor),Lamprolepis_geniculata),(((Buteo_buccata,Vulpanser_odoratus),(Chlamydotis_docilis,(Grus_leucocephala,(Leptobrachium_moschata,(Litoria_sp,Tamias_grunniens))))),Tylototriton_ocellatus)),Siniperca_aeruginosus),Selenocosmia_exanthematicus)),(Buthus_exquisita,(Odobenus_weberi,Pusa_hongkongensis))),(Phrynomerus_dominus,Pterinochilus_leucogeranus)),Lamprolepis_seemani)),(((Cyclemys_tricolor,Phrynops_serpentina),Underwoodisaurus_kuhli),Falcipennis_semipalmatus)),Gazella_anatina),Epipedobates_armeniacus),(((((((((Allobates_rusticolus,(Apalone_apollo,(Phalaropus_solitaria,crecca_troglodytes))),Branta_dispar),(((Bufo_cavirostris,(Gavia_eremita,Scolopendra_infrafrenata)),Limnodromus_maritimus),Polypedates_aegagrus)),Eremophila_cianeus),(Pareas_tenuirostris,Phrynops_unicus)),(Oenanthe_wislizeni,Rhacodactylus_casualis)),Natriciteres_helvetica),Falcipennis_pulchripes),Nyctaalus_arvensis))),(Nipponia_mlokosiewiczi,Ziphius_rudicolis)),((Chen_mystacinus,(Haliaetus_morinellus,Homalopsis_reinwardti)),((((Chettussia_xanthocheilus,Sus_guentheri),Lutra_garulla),Passer_cavirostris),(((Eubalaena_emilia,Ortigometra_subruficollis),Perdix_garmani),Mogera_grunniens)))),(Butastur_cristatellus,Rhabdophis_exquisita))),Odobenus_glacialis),(((((Acanthosaura_rutila,Cuora_brevipes),Coturnix_fasciata),Accipiter_canagica),Alloporus_tataricus),Philacte_percnopterus)),Brachypelma_angustirostris),Dipsosaurus_duplus),(Anodonta_grupus,Falco_undulata)),Bombyx_caudatus),(Nemachilus_dentatus,Tylototriton_guineti)),Phoca_porphyrio),(Grampus_striatus,Lamprolepis_bairdii)),((Chelodina_agama,(Oceanodroma_fiber,Turdus_bewickii)),Holaspis_clinatus)),Chlamydotis_hispida),Cyclagras_mackloti),((((((((((Aix_galeatus,Cottus_gregarius),Osteopilus_fiber),Pelodiscus_modestus),Capreolus_nyroca),(Hadrurus_flavigularis,(Homalopsis_horridum,Oedura_castaneus))),Syrrhaptes_caudolineatus),(Lepus_grossmani,Tadarida_cherrug)),(Latastia_marmoratus,(Scolopendra_garmani,Varanus_viridescens))),Mylopharyngodon_armata),Allobates_pardalis)),Eschrichtius_metallica),((Eirenis_enhydris,(Rhabdophis_taczanowskius,Vormela_kingii)),Macrorhamphus_caniceps))),Paraphysa_longipennis)),Phelsuma_hemionus),(((((((((Amphiuma_mutabilis,(((Eunectes_grossmani,Lyrurus_adamsii),Xenopeltis_cyanogenys),Salamandra_galeatus)),Trachemys_limosa),Procellaria_nigrolineatus),(((Apus_maurus,Trionyx_guttata),(Athene_celer,(Cervus_platyrhinos,Liasis_regius))),Fulica_laevis)),(((((((Basiliscus_subruficollis,Rhabdophis_Jankowskii),Chlamydosaurus_alterna),Dasypeltis_caniceps),(Lepus_quadrivirgata,Riparia_arseniavi)),Moschus_isabellina),Mabuya_cristata),Cyclemys_peregrinus)),(Picus_bellii,Pleurodeles_insignis)),(Hyperoodon_cristatellus,Uromastyx_heliaca)),(Hydrochelidon_aleutica,(Pachytriton_armeniacus,Tupinambus_madagascariensis))),Poephagus_eulophotes)),Chen_viridescens),((((((((((((((((((Acanthogonatus_pulchra,Eubalaena_stagnalis),((((((((Acanthoscurria_salamandra,Lycaenopsis_means),(Columba_caeruleus,Ctenotus_pelagicus)),Megaptera_barbata),((((((((Accipiter_enydris,Capeila_trianguligerus),(((((((((((((((((((Anthropoidae_trianguligerus,((Chelodina_pusilla,Kassina_septentrionalis),Coturnix_doriae)),Chrttusia_melanostictus),Gypaetus_flava),Colaeus_piscator),Phyllopneuste_albopillosum),Polypedates_arvensis),(Myotis_regius,Sturnus_bengkuluensis)),Rhynchophis_aegagrus),Elaphe_yeltoniensis),(((Bradyporus_decorus,Pelecanus_glutinosus),Ceratophrys_ciliatus),Seokia_rupestris)),(Butastur_kazanakowi,Eunectes_albertisii)),(((Calidris_colombianus,(Chlamydotis_bedriagai,(Minipterus_salvator,Platemys_scalaris))),(Capra_bengkuluensis,Pratincola_bewickii)),Coregonus_plumipes)),Vormela_fasciolata),Capeila_mykiss),Ophisops_sanguinolentus),Phrynomerus_caudolineatus),Opheodrys_dendrophila),(Bronchocela_albocinctus,Dahurinaia_leucostomum)),Fregilegus_albirostris)),((((((((Brachypelma_alpina,Pleurodeles_carinata),Spalerosophis_nippon),Capra_leucophyllata),Odobenus_exanthematicus),Elseya_leucophtalmos),(Eumeces_wogura,(Falcipennis_cygnus,Haliaetus_clarus))),Cuora_caudatus),Sphenurus_subglobosa)),Pterinochilus_oenanthe),(Totanus_mlokosiewiczi,Xenophrys_korschun)),((Chettussia_monorhis,Grampus_physalus),Seokia_mystaceus)),(((((Ahaetulla_undulata,(Chelodina_sauritus,(Hysterocrates_turtor,((Machetes_flavolineata,Scincus_casualis),Philomachus_marcianus)))),Eudramias_jacksoni),Tringa_nippon),((((((((Anser_rudicolis,Ketupa_hendricksoni),Dahurinaia_atrigularis),((Colaeus_bobac,Rhombomys_fuscus),Paramesotriton_fuscus)),((((Crocodylus_borealis,(((Eunectes_temminckii,Oxyura_taezanowskyi),Phyllopneuste_albirostris),Himantopus_docilis)),Crocodylus_reinwardti),Hadrurus_tadorna),Lutra_merganser)),Uncia_rosea),Dendrobates_troglodytes),Pelecanus_modestus),(Paraphysa_cyanogaster,Phalaropus_taezanowskyi))),Phalaropus_peregrinus)),Dipsosaurus_intermedia)),(Emydura_picta,Net_arseniavi)),Gyps_indicus),Homopholis_pygmaeus),((Ardea_grus,Charadrius_brachydactyla),Oedura_classicus))),((Haplopelma_temminskii,Spermophilus_albertisii),Ziphius_tinnunculus)),Plethodon_cocincinus),(((((Cypselus_leucostomum,Trachemys_novaeangliae),Pseudorca_bairdi),Pagophila_rubida),Eumeces_subrubrum),Phrynohyas_cocincinus)),Rhinolophus_laevis),Dahurinaia_crispus),(((((Ameiva_nasuta,Gallinago_regius),Calotes_constrictor),(Pelodiscus_heterolepidotus,Porzana_pallidus)),(((Aquila_cinclus,(((Egretta_dentata,Pelecanus_rosea),Holaspis_nivalis),Xenochrophis_orientalis)),((((Buthacus_falcipennis,Testudo_bedriagai),(Litoria_cornix,Salmo_falcipennis)),Charadrius_carnifex),Margaritifera_vittatus)),(Limosa_cliffordii,Porphyrio_flavirufa))),(Lampropeltis_arseniavi,Leiocephalus_dentata))),((((Alopex_vertebralis,Lampropeltis_personata),(((Anthropoides_getula,Gambelia_lobatus),(((Balaenoptera_ferina,Mareca_albopillosum),Oedura_maihensis),(((Balaenoptera_korschun,Bubulcus_castaneus),((Corallus_bimaculata,Phrynosoma_cyanus),Eumeces_javanica)),Mogera_smithii))),Eremophila_spinifera)),((Capreolus_paganus,(Certhia_linaria,Pachydactylus_canorus)),Cygnopsis_citreola)),Bos_saiga)),Saiga_auriculatus),((((((Alauda_cinerea,((((Almo_melonotis,Pyxicephalus_bifasciatus),(Polypedates_emilia,Sceloporus_cyanogenys)),Pareas_madagascariensis),Epicrates_australis)),Bufo_tricolor),Madagascarophis_arcticus),Emberiza_vitticeps),Antaresia_mitratus),Ophisops_leucotus)),Capeila_miliaris),((Ethmostigmus_celer,(Lobipes_pulcher,Tamias_carinatus)),Rufibrenta_scalaris)),Certhia_cristatella),Tupinambus_rutilans),((((Homopholis_leiosoma,Paraphysa_collaris),Pseudemys_caelebs),Lyrurus_arseniavi),Pyrrhocorax_tarda)),Sphenurus_moschiferus),((((Athene_cinereus,(Budytes_erythrogastra,Phasianus_ovata)),Petrocincla_limosa),Totanus_eulophotes),(Theloderma_sudanensis,Tringa_cristatus)))),(Perdix_godlewskii,Scorpio_leptochelis)),((((((((((Accipiter_mystacinus,(Leptobrachium_mnemosyne,Xenophrys_clarus)),Picus_graeca),((Ctenosaura_calvus,Opheodrys_homeana),Hemitheconyx_aureostriata)),Philacte_filipjevi),Vulpes_graeca),Larus_macqueni),Corytophanes_melanostictus),(Ketupa_gemmicincta,Lutra_deserti)),(Fuligula_flavomaculatus,(Siniperca_homeana,Vormela_temminckii))),Tetraogallus_spaldingi)),Fulica_cepediana),Spalerosophis_avocetta),Enhydris_rufina),((((((((((Acanthogonatus_cristatellus,Chrysopelea_tuberculosus),((Candoia_agama,Eremophila_smithi),Certhia_holbrooki)),((((Alloporus_novaeangliae,((((((((Ambystoma_dactylisonans,Salmo_milii),((Aquila_gibbosus,Cyriopagopus_dentatus),Eudramias_tuberculosus)),Androctonus_viscivorus),Ctenosaura_querquedula),Bombyx_gallicus),((Chamaeleo_himantopus,(Enhydra_duplex,Osmoderma_weberi)),Remiz_pygmeus)),((Enhudra_dignus,(Halichoerus_coturnix,Kinixys_hardwickii)),Limnaeus_leucogaster)),Chlidonias_bedriagai)),(Norops_arizonensis,Tetrao_spaldingi)),Capeila_exquisita),((Egretta_leucostomum,(Parabuthus_middendorffi,Streptopelia_verrucosus)),Homopholis_scripta))),Lasiodora_dubius),(((((((Caiman_platycephala,(Latastia_azureus,Thamnophis_davidiana)),Ingerophrynus_pachypus),(((Falcipennis_zagrosensis,Lyrurus_fuellebornii),((Larus_leucogaster,Phrynosoma_calamita),(Rangifer_longipes,Seokia_opimus))),Spermophilus_fuscus)),Nerodia_decorus),Lycodon_himalayensis),Chrysopelea_nivalis),Citellus_rutila)),(((((Falcipennis_atra,Turdus_schokari),Perdix_dispar),Pyrgilauda_peregusna),((Gambelia_marmorata,((((Gecarcinus_querquedula,(Nucifraga_circia,Phalaropus_medirostris)),Tylototriton_walti),Spalerosophis_angustirostris),(Gonyosoma_collybitus,Melanocoryhpa_mirabilis))),Pelecanus_maldivarum)),Tadarida_gibbosus)),Plegadis_caryocatactes),Oxyura_floridana),Rhabdophis_nigra),Accipiter_minor)),Sternotherus_marmoratus),(((((((((Acanthis_enydris,Numenius_chrysaetus),(((((((((Atrophaneura_chukar,Chondropython_erythronota),Mareca_monedula),Rosalia_stejnegeri),Laudakia_davidiana),(Gongylophis_argentatus,Mesoplodon_monedula)),(Cuon_veredus,Rhamphiophis_gallicus)),Natriciteres_tolai),Dipsosaurus_interiorata),Psammophis_garulla)),Moschus_aestivus),(((Clemmys_fulva,Mesoplodon_pallidus),Damon_pusilla),Sorex_madagascariensis)),Dipsosaurus_ciliatus),Oxyura_cyanus),Aythia_pulchra),(((((((((((Anthropoidae_getula,Eudrornias_lutris),((Brachypelma_vulgaris,Mergus_crocodilus),(Ptychozoon_insignis,Squaterola_cyanea))),((((Bradypterus_japonensis,Seokia_zagrosensis),Mesoplodon_torquatus),Cervus_campestris),Emydura_iguana)),(Ctenosaura_cianeus,Eryx_argentatus)),(Capella_meermani,Siniperca_javanica)),Enhudra_australis),((Bubulcus_hypomelus,Odonthurus_weberi),Epicrates_ameiva)),Megophrys_armeniacus),(Gongylophis_bengalensis,Lampropeltis_flavescens)),Phrynops_schrencki),(Balaena_not,(Bubulcus_chamaeleontinus,(Ninox_dione,Totanus_Anas))))),Gerrhosaurus_hipposideros)),Gongylophis_subrufa),Triturus_helvetica),((Cuora_tetrax,Monticola_stejnegeri),Pleurodeles_rupestris)),Ctenosaura_canagica),((((((Anas_imperator,Callipogon_oxycephalum),Grus_ion),Neophron_tridactylum),Sitta_pulchripes),Monodon_gecko),Phylloscopus_mykiss)),Phasianus_truncatus),(((((((((((((((((((((((Abantias_weberi,((((((((((((((((((((((((((((Acanthoceros_emarginatus,(Chettussia_altaica,Moschus_azureus)),(Branta_regius,Eulabeia_longicaudata)),(Atrophaneura_dennysii,Pyxicephalus_eximia)),(Hemiscorpius_musicus,Leiopython_auriculatus)),Chelus_trigonopodus),Petrocincla_cambridgei),Ketupa_irregularis),((((Aythia_fissipes,((((((((Branta_monoceros,(Pachytriton_stagnalis,Porzana_clypeata)),(Chrysemys_japonica,Citellus_tarda)),(Geochelone_monachus,Polypedates_sagrei)),(Larus_ovata,Mergus_colchicus)),Pleurodeles_carinatus),Latastia_rubicola),Gonyosoma_insularis),Uncia_carinata)),Balaena_lagopus),Scaphiophryne_brongersmai),((((Bombycilla_manul,(Pelodiscus_novaeangliae,Sterna_rusticolus)),Phrynohyas_carinatus),Leuciscus_fallax),((Grus_breitensteini,(Pusa_heliaca,Tadarida_jacksoni)),Motacilla_imperator)))),((((Aegialifes_arvensis,((Dipus_celer,Thecla_boyciana),Haliaetus_brandtii)),Syrrhaptes_coelestinus),(Chettussia_Jankowskii,Iomachus_atrigularis)),Monticola_tarandus)),((((((((((Acanthoscurria_stimsoni,Pandinus_leucophyllata),Chalcides_pugatshuki),Phrynops_canus),Theloderma_ferruginea),((((((Chrysemys_scalaris,Tetrao_heterolepidotus),(Cottus_viridescens,(((((Cyclagras_prominanus,Grampus_ion),Elseya_carinata),(Gambelia_cranwelli,Tamias_cliffordii)),Recurvirostra_atra),((Micropalama_agama,Rufibrenta_orientalis),Squaterola_opimus)))),Ursus_albopillosum),Scincus_cinereus),(Podoces_avosetta,Thamnophis_caerulea)),Ursus_limosa)),(Chelodina_vastus,((Cinclus_communis,Phasianus_montela),(Gecarcinus_caudata,Phrynocephalus_jaspidea)))),Holodactylus_microlepis),((((((Bombycilla_pholeter,Scolopax_corone),(((((Lamprolepis_ladogensis,Lepidobatrachus_stejnegeri),Lystrophis_bairdii),Margaritifera_subruficollis),crecca_grunniens),Neolycaena_griseus)),Pseudemys_nivalis),((Kinixys_monachus,Osteopilus_hilarii),Phyllopneuste_citrsola)),Scaphiopus_sibirica),Otocoris_dignus)),((Fregilegus_atthis,Pelomedusa_calamita),Vipera_grus)),Macrorhamphus_occitanus)),(((Anthropoides_rufus,Riparia_hodgsoni),(Leuciscus_tarandus,Philothamnus_parreyssi)),((Melanocorypha_cristatellus,Plethodon_rosea),Ninox_imperator))),Alectoris_scabra),(Eulabeia_coturnix,Nhandu_cristatella)),((Ovis_ameiva,Trapelus_sauromates),(Phormictopus_monachus,Rissa_marinus))),Citellus_maritimus),(Capra_diadema,Streptopelia_nigriceps)),Monachus_shadini),Neophron_leucomelas),Varanus_davidiana),Uncia_emilia),(Limnodromus_decor,Tamias_graeca)),Scaphiophryne_nigropalmatus),Aplopeltura_squaterola),Grampus_sinensis),(((Acanthogonatus_brandtii,Eudrornias_mackloti),(((Amphiuma_viridescens,Eryx_tigrinus),Tringa_argali),Prunella_pachypus)),Athene_cliffordii)),(Lepus_pygargus,Lobipes_maldivarum)),(Cynops_gibbosus,((Liasis_aristotelis,Tadorna_leucogaster),(Pyxicephalus_argentatus,Sus_karelini)))),Liasis_undulata)),((((((((((((((((((((((((Accipiter_scripta,Erpeton_albopillosum),Pachydactylus_ferox),Squaterola_leucoptera),(Alcedo_classicus,((Cervus_enhydris,Middendorffinaia_griseus),Neophron_adspersus))),Lasiodora_bengkuluensis),(Cardiocranius_sieboldii,Pterinochilus_floridana)),(((((((Acipenser_vegans,Sturnus_ferina),Aix_helvetica),((Gambelia_cristatellus,(Leptopelis_ichthyaetus,Oceanodroma_rudicolis)),Theloderma_boyciana)),Scaphiopus_cherrug),(Bradypterus_reticulatus,Fregilegus_tenuirostris)),((((((((Almo_collaris,Natriciteres_corticale),((Arenaria_doctus,crecca_purpurascens),Balaena_maritimus)),((((((Argynnis_vipio,Osteopilus_novaeguineae),Synthliboramphus_diffidens),(Citharacanthus_melanoleucus,(Pyxicephalus_nivalis,Uroplatus_ussuriensis))),Synthliboramphus_colombianus),Rhacophorus_himalayensis),((Eudramias_dominicus,(Geochelone_pendulinus,Ophisops_smithii)),Picus_cyanochloris))),Bombina_australis),((Cottus_albertisii,Phrynosoma_cancerides),Oligodon_barbata)),(((((Bubulcus_scabra,Moschus_sphenocercus),Netta_spaldingi),(Otis_nebrius,Pterocles_erythronotus)),Monachus_krueperi),Scaphiophryne_quadriocellata)),Kinixys_vegans),Ardea_deserti)),Lutra_fiber)),Ptychozoon_ameiva),Vulpes_pulchra),((((Ambystoma_exquisita,(Ambystoma_leucomystax,(Chrysopelea_radiata,Tamias_prasina))),Hadogenes_fallax),Ortigometra_aceras),(((Basiliscus_fluviatilis,Middendorffinaia_monorhis),(Hottentotta_climacophora,Pachydactylus_nelsonii)),Melanocorypha_azureus))),(((((((Aegialifes_squamatus,Salvelinus_spaldingi),Eudramias_isabellina),Ethmostigmus_jaculus),((Bubulcus_variabilis,Dafila_parreyssi),Kinosternon_fuliginosus)),((Balaena_colchicus,Enhudra_ocellatus),(Basiliscus_rutilans,Xenophrys_crucigera))),((((((((Alcedo_coelestinus,Chlamydosaurus_leiosoma),Squaterola_dione),Mesoplodon_isabellina),Phelsuma_epops),Pusa_piscator),Alectoris_monacha),Buthacus_fuliginosus),(Brachyramphus_ochropus,Sericinus_angulifer))),Falcipennis_cavirostris)),(Megophrys_jubata,Tursiops_boulengeri)),Oenanthe_graeca),Nemachilus_laevis),((((Ahaetulla_leucoryphus,(Gekko_floridana,Turdus_schneideri)),Anthropoides_weberi),Phelsuma_ignicapillus),Salmo_rupestris)),Tringa_nigra),Eubalaena_schrencki),Furcifer_glutinosus),Bubulcus_canagica),(Heterodon_laevis,((Ortigometra_armata,Otocoris_rubicola),Uroplatus_perdix))),((Bombina_marmoratus,Parnassius_sujfunensis),Phrynocephalus_dennysii)),Netta_australis),Ninox_hypoleucus),Homopholis_hyemalis)),Agama_melanoleucus),(Allactaga_mitratus,((((((((Aphonopelma_rudicolis,(Otocoris_middendorffi,Sterna_gebleri)),(Charadrius_vermiculatus,((Chen_virgo,Cinclus_montela),Liasis_caudatus))),(Colaeus_exanthematicus,(Tadarida_aureostriata,Triturus_tentaculatum))),Grammostola_serpentina),Salvelinus_avinivi),Polypedates_cygnus),Ptyodactylus_temminckii),Pseudorca_rudicolis))),((((((((Alpes_gobio,((((Chlidonias_atrigularis,Pelusios_medirostris),Hemitheconyx_undulata),Pica_breitensteini),(Eirenis_clypeata,Odobenus_nyroca))),(Aplopeltura_pallidus,(Phyllopneuste_hungaricus,Pituophis_rufodorsata))),(Hyla_longicollis,Synthliboramphus_Bernicla)),Psammophis_quinquestriatus),((Gekko_paradoxus,Riparia_chamaeleontinus),Haliaetus_leporosum)),Oenanthe_cepediana),crecca_colombianus),Anthropoidae_cinclus)),(Phrynocephalus_meles,Sphenops_leucogeranus)),Eremophila_undulata),Nyctixalus_taeniura),Ortigometra_vastus),(Aegialites_merganser,(Budytes_helvetica,Hirundo_daurica))),Grampus_nyroca),Dyscophus_zagrosensis),((((((((((Acanthogonatus_lesueurii,Pyrrhocorax_grossmani),Corytophanes_erythronotus),(Eschrichtius_thibetanus,Pseudemys_monoceros)),(Chettussia_eulophotes,Enhudra_erythropus)),(Bombus_rupestris,Procellaria_molurus)),(Alaus_smaragdina,Marmota_soloensis)),Dipus_taxus),Coleonyx_ruthveni),Sphenurus_rufina),Rhesus_adamsii)),((((((((((((((((((((((((((((((((Acanthogonatus_adamsii,((Apodora_scripta,((Corallus_porphyrio,Saxicola_leucocephala),(Gyps_emarginatus,(Lepus_vitulina,Ptyodactylus_marinus)))),(Salvelinus_nasuta,Scaphiopus_laticauda))),(Grus_interpres,Rhabdophis_trigonopodus)),((Clemmys_subglobosa,(Coenobita_boa,Erpeton_ion)),Motacilla_sibiricus)),Damon_breitensteini),((Arctomys_perrotetii,(Atrophaneura_caudata,Coregonus_merganser)),Neophron_peregusna)),(Anas_leucogaster,Eublepharis_fuscatus)),(((Avicularia_pugnax,(Cyriopagopus_versicolor,Varanus_subniger)),(Boiga_middendorffi,Phelsuma_brachydactyla)),Lyrurus_unicus)),((Canis_collybitus,Pelusios_caryocatactes),Pachydactylus_caryocatactes)),Spalerosophis_bairdii),Nipponia_maculatum),Vormela_fimbriatus),((((((((Alaus_bukhunensis,(Circaetus_geniculata,Morelia_sieboldii)),Petrocincla_intermedia),(Hemiscorpius_australis,(Ketupa_saxatilis,Rhacophorus_lineatus))),Teratolepis_rudicolis),Egretta_rupestris),((((((Androctonus_uluguruensis,Kassina_albertisii),Eunectes_scrofa),Ketupa_chrysargos),(Citellus_garullus,(Laudakia_perdix,(Numenius_martensi,(Tadarida_adspersus,Tadarida_cyanogenys))))),(Ctenotus_manul,(Net_albatrus,Python_cinclus))),Clemmys_homeana)),(Clemmys_querquedula,(Parnassius_armeniacus,Upupa_parahybana))),(((Cinclus_fallax,Oenanthe_fasciolata),Ctenosaura_chukar),Phelsuma_longicollis))),(((Apodora_erythrogastra,(Notophthalmus_bairdi,(Rangifer_chrysaetus,Syrrhaptes_gigas))),((Cardiocranius_galeatus,Petrocincla_timidus),Querquedula_lutra)),Cyclemys_pusilla)),(((Acanthoscurria_holbrooki,(((((Accipiter_erythropus,((Agama_caeruleus,Bos_nebrius),Hemiscorpius_gregaria)),Limnaeus_erythronota),((Almo_madagascariensis,Felis_capra),Vulpanser_duplus)),(Phalacrocorax_ibera,Pseudorca_deremensis)),Pterinochilus_musicus)),(Almo_albicilla,((Anthropoidae_pulchripes,Leptobrachium_rufina),((Hydrochelidon_veredus,Picus_sujfunensis),Nerodia_rufodorsata)))),(Netta_kingii,Theloderma_scripta))),Odonthurus_australis),((Bombus_agama,Kassina_aeruginosus),(Erpeton_percnopterus,Phormictopus_virgo))),Falcipennis_septentrionalis),(Amphiuma_mlokosiewiczi,Chamaeleo_completus)),Felis_rostratus),(Carabus_japonica,Equus_lavaretus)),(Chlamydotis_taczanowskius,Thymallus_maculatum)),Lycodon_iguana),Platalea_brevipes),(((((((Balaena_imperator,Gavia_teniotis),Cyriopagopus_duplex),Pareas_vittatus),Phyllopneuste_bairdi),Chlamydosaurus_bairdi),Zosterops_triangulum),(Moschus_unicus,Telescopus_prasina))),Petrocincla_pygargus),Bradypterus_interiorata),(((Alpes_schneideri,((Boa_bairdi,Glareola_oenanthe),((Chamaeleo_boa,Saga_moschiferus),(Mergus_marmorata,Micropalama_hypomelus)))),Nemachilus_salei),Streptopelia_arcticus)),Anas_mystaceus),Pogona_caudolineatus),(Ctenosaura_bengkuluensis,Notophthalmus_gobio)),(((((Acanthosaura_rudicolis,(((((((((((((((Aix_constricticollis,Liasis_iankowskii),Asthenodipsas_meermani),(((((((((Antilope_caesius,(Porphyrio_leiosoma,Selenocosmia_vegans)),(Hottentotta_coelestis,Salamandra_caucasicus)),Oceanodroma_sauritus),Lepus_salvator),((Chelodina_scabra,Rhamphiophis_metallica),((Chlamydosaurus_jaculus,Hemiscorpius_multituberculatus),Thecla_floridana))),Eudrornias_saiga),Aythia_scalaris),Phrynomerus_ladogensis),(Crotaphytus_clinatus,Neolycaena_albocinctus))),(Amphiuma_pulchripes,(((Haliaetus_angulifer,Scolopax_vitticeps),Phoca_cenchria),Odobenus_nigrolineatus))),Panthera_chrysaetos),(Cuculus_aeruginosus,Gekko_prominanus)),Aythya_iguana),Kaloula_maculatum),Remiz_savignii),Sternotherus_doriae),(((Falco_pugnax,Lamprolepis_savignii),(Fuligula_cristatellus,Saiga_perrotetii)),Grus_mystaceus)),((Parus_aceras,Salmo_lasiopterus),Pelodytes_pardus)),Rhacodactylus_celer),Tringa_cyanea),Dendrelaphis_getula)),(Lanius_ovata,(Oxyura_cyanea,Phrynocephalus_uluguruensis))),(Dyscophus_venulosa,(Macrorhamphus_macularius,Mergus_docilis))),Tursiops_ornata),Psammophis_lividum)),Oxyura_smaragdina)),(Milvus_eburnea,Tryngites_subminiatus)),Aegypius_hirundo),((((((((Bradyporus_sieboldii,Eutamias_bifasciatus),Scorpio_oxycephalum),(Hyla_aristotelis,Lagenorhynchus_barbata)),Camptoloma_equestris),Xenopeltis_perdix),Uroplatus_wumuzusume),Pareas_gregarius),Sphenops_eximia)),(((Eulabeia_guentheri,((Laudakia_standingii,Turdus_tinnunculus),(Mergus_schreibersi,Pleurodeles_taeniura))),Phrynomerus_amboinensis),Lutra_orientalis)),Phrynocephalus_scripta),Coturnix_vulpes),(((((Brachypelma_ignicapillus,(Epipedobates_alpina,Lanius_sanguinolentus)),Fuligula_botnica),Eutamias_hypoleucos),Megaloperdix_fragrans),(((Coleonyx_vulpes,(Cypselus_rosmarus,Lamprophis_mongolica)),(Haliaeetus_ladogensis,(Hirundo_gecko,Lasiodora_aestivus))),(Seokia_livia,Sphenops_aceras)))),Casarca_ruthveni),(((((((((Acanthis_bellii,(Butastur_glacialis,Porphyrio_grossmani)),Buthacus_variabilis),Eryx_bicinctores),(Phrynops_communis,Vormela_cranwelli)),(((Basiliscus_coturnix,Marmota_taezanowskyi),Monodon_caudatus),(Hyperoodon_atriceps,Mabuya_marinus))),Mergus_leucopsis),((Mareca_novaeangliae,Paraphysa_mirabilis),(Pleurodeles_troglodytes,Ursus_scripta))),Accipiter_laticauda),((((Gonyosoma_lesueurii,Moschus_zenobia),((Nyctixalus_flavigularis,Rhynchaspis_atra),Ptychozoon_chuatsi)),Pelusios_mlokosiewiczi),Spalerosophis_holbrooki))));' +s2='((((Abantias_mirabilis,((Chlidonias_emilia,Iguana_yeltoniensis),(Podoces_hemilasius,Ameiva_erythronotus))),((Chelus_lepturus,((Sericinus_guangxiensis,Acanthosaura_oenanthe),(((Capella_melonotis,Meles_angustirostris),Ingerophrynus_fernandi),Chlamydotis_euptilura))),(Remiz_montela,((((((Ameiva_pica,(((((Cygnus_chukar,Rhynchaspis_insignis),Erpeton_alterna),Lasiodora_minor),Trapelus_glacialis),Hyla_jaculus)),((((Dipsosaurus_gregaria,((Hottentotta_homeana,Scaphiopus_mystaceus),(Procellaria_platycephala,Underwoodisaurus_stellatum))),Ptyodactylus_cyanochloris),((Hydrochelidon_Jankowskii,Tadorna_monilis),Meles_pardalis)),Micropalama_deminutus)),(Recurvirostra_mitratus,sibiricus_cliffordii)),(Erpeton_sp,Salvelinus_spinifera)),(((Chamaeleo_colubrinus,(Chrysemys_fernandi,Norops_alpinus)),Hyla_aureola),Ketupa_cyanea)),Asthenodipsas_kurilensis)))),(((((Hadrurus_trianguligerus,((crecca_acanthinura,Eryx_sauromates),((Pogona_tricolor,Rosalia_veredus),Turdus_lividum))),(((Haliaeetus_hyperboreus,Bombyx_bairdii),(Physignathus_fragrans,(Philothamnus_bairdi,Anthropoidae_carnivorus))),(Phalacrocorax_longipennis,Calidris_eulophotes))),((Gekko_hypomelus,Pagophila_personata),Circus_pallasii)),(Psalmopoeus_veredus,((Turdus_bicoloratum,Nemachilus_breitensteini),(Chrysopelea_rosmarus,Erpeton_calamita)))),((((Spalax_corsac,(((Pyrrhocorax_siebenrocki,Pseudemys_pygmaeus),(Aix_prasina,(Aix_pugatshuki,Lepidobatrachus_plumifrons))),(Dendrelaphis_climacophora,Saxicola_caesius))),((Chalcides_cyanochloris,((Cynops_grus,((Neolycaena_virgo,Thamnophis_diadema),(Python_haliaetus,Tryngites_boschas))),Phelsuma_helena)),((Plegadis_sanguinolentus,Argynnis_equestris),Coenobita_pulchra))),((((((Lamprophis_teniotis,Pelodytes_solitaria),(Laudakia_parahybana,Limnodromus_glottis)),(((Pelusios_interpres,(Sus_cyanea,sibiricus_multifasciata)),Rhamphiophis_means),Telescopus_alpinus)),Net_major),(Lampropeltis_leucoptera,(Alpes_ibis,Lystrophis_murinus))),(((Apalone_heudei,Arctomys_coloratovillosum),Salvelinus_fasciata),(Caiman_fulvus,Chondropython_calligaster)))),(((((Gyps_pusilla,(Pandinus_meermani,Tursiops_lopatini)),Passer_gregarius),(((Candoia_sujfunensis,Vulpes_fusca),Fregilegus_cynodon),((Otis_grossmani,Notophthalmus_krueperi),Petrocincla_keyzerlingii))),Megophrys_cancerides),Carabus_manul)))),(((((((((((((Abantias_situla,Middendorffinaia_rufinus),(((Acanthis_major,(Selenocosmia_completus,Syrrhaptes_kopsteini)),Seokia_savignii),Bradyporus_miliaris)),(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Acanthis_acanthinura,Balaenoptera_unicus),Paraphysa_canagica),Eumeces_aegyptia),Balaenoptera_nigra),Phasianus_orientalis),(Amphiuma_communis,Teratolepis_nasuta)),(Bombycilla_citreola,Rhesus_gigas)),(Chettussia_medici,Rhacophorus_erythropus)),Butastur_helena),Paramesotriton_pugatshuki),Philacte_dominicus),(Elaphe_lineatus,Salamandra_dentata)),Sturnus_shadini),(((((((Acanthoscurria_graculus,Sorex_scincoides),Rhamphiophis_variabilis),Falco_gallinago),(Enhydris_caucasicus,(Iomachus_arseniavi,Porzana_graeca))),Chondropython_lutris),Accipiter_borealis),((Aegialifes_pictus,Podoces_botnica),(((((Archispirostreptus_javanica,Squaterola_pulchripes),Scolopendra_teguixin),Mergus_purpurascens),Tetraogallus_Bernicla),Natriciteres_clarus)))),(Antaresia_argentatus,(((((((((Cygnopsis_gecko,(Natriciteres_vulpes,Pelodiscus_pardus)),(Falcipennis_teguixin,Fulica_dentatus)),Gonyosoma_geniculata),Sphenops_rudicolis),Rhynchaspis_turneri),Dipsosaurus_uluguruensis),Tropidurus_striatus),Megaptera_tigrinus),Sorex_brongersmai))),((Chlamydosaurus_odoratus,Eulabeia_occitanus),Ctenosaura_rufus)),(((((((((((((((((((((((((((((((((((((((((((((((Acanthis_boa,((((Callipogon_tigris,Haplopelma_hassanica),Tetrao_carbonaria),Eirenis_filipjevi),Oenanthe_subcinctus)),(((((((((Acanthoscurria_hipposideros,((((((((((((((((((((((((((((((((((((((((((((((Accipiter_elegans,((((((((Dipsosaurus_politus,Hadogenes_cianeus),Mochlus_elegans),Minipterus_leucogeranus),Monodon_fulvus),Lepus_exanthematicus),Fulica_insignis),Marmota_avinivi),Gekko_triangulum)),Cypselus_comicus),Acheron_mandarina),(Ambystoma_glutinosus,(Leptobrachium_bukhunensis,Lepus_dignus))),(Avicularia_leucomystax,Eryx_ferina)),(Chondropython_stellio,(Haliaeetus_rudicolis,Iomachus_perdix))),Philothamnus_jaculus),Halichoerus_hipposideros),Lycaenopsis_grossmani),Phrynocephalus_chuatsi),((Ctenotus_tataricus,Phalacrocorax_niloticus),Tadarida_barbata)),Pandinus_rubicola),Tetrao_dendrophila),(((((((Aphonopelma_compactus,Iguana_flavolineata),Gongylophis_taezanowskyi),(Eremophila_cyanogenys,Petrocincla_javanica)),(Balaena_tarda,Xenochrophis_clericalis)),(((((((Callipogon_zenobia,(Ethmostigmus_maihensis,Milvus_dominus)),(Melanocorypha_vastus,Ptychozoon_cambridgei)),(Ctenotus_yeltoniensis,Dendrelaphis_vipio)),Chamaeleo_albertisii),Phrynocephalus_felderi),Oligodon_melanoleucus),Ophisops_heterolepidotus)),Cyriopagopus_nupta),Burhinus_uluguruensis)),Corallus_hodgsoni),(Allactaga_mexicana,Desnana_schokari)),(((Canis_siebenrocki,Strepsilas_rostratus),(Ceratophrys_kazanakowi,Saxicola_cynodon)),Phoca_taxus)),(((((((((Aix_ammon,Platemys_molurus),(Circaetus_venulosa,Teratolepis_monachus)),Psammophis_pulchripes),Glareola_hilarii),Laudakia_albocinctus),Epicrates_weliczkowskii),Rhynchophis_atthis),(Asthenodipsas_battersbyi,Corvus_clypeata)),(((Anas_japonica,((((Calidris_microlepis,(Liasis_comicus,Netta_iankowskii)),(((Chettussia_weberi,Lasiodora_meles),Xenopeltis_regius),Limnodromus_calidris)),(Pyxicephalus_ocellatus,Trachemys_vegans)),Cottus_quadriocellata)),Zosterops_giganteus),Hadrurus_vulpes))),Dendrelaphis_cinereus),Phylloscopus_stagnalis),(((((((Aphonopelma_aspera,Mogera_corsac),((Bombyx_ridibundus,Candoia_zenobia),(Cyriopagopus_rusticolus,Micropalama_naumanni))),Spermophilus_fragrans),(Phrynosoma_australis,Syrrhaptes_monoceros)),(Onychodactylus_maculata,(Pandion_odoratus,Trionyx_graculus))),Fuligula_apus),((Bos_castus,(Chalcides_exquisita,Salmo_albicilla)),(Buthacus_vastus,((Camptoloma_personata,((Chrttusia_maihensis,Pyrgilauda_pica),Corallus_argentatus)),Nemachilus_asperum))))),(Alauda_wislizeni,Mylopharyngodon_paradisi)),(((((((Arctomys_rubida,Chamaeleo_microlepis),Tadarida_dispar),Balaenoptera_leucomelas),(Holaspis_griseus,Parus_modestus)),Tadarida_sinensis),Cyclemys_glaucescens),((Halichoerus_altaica,Ketupa_ornata),(Laudakia_multifasciata,Upupa_auriculatus)))),(Almo_leucogaster,Anolis_emarginatus)),(Telescopus_dexter,Vipera_subcinctus)),Tadorna_albirostris),Tiliqua_vastus),((Alauda_lutra,Elaphe_guangxiensis),((Anthropoidae_arcticus,Columba_emilia),Thecla_pendulinus))),((((Bradypodion_dennysii,Butastur_monorhis),Elaphe_cristatus),Ziphius_auratus),Moschus_crispus)),((Anthropoidae_wumuzusume,Boiga_scripta),((((((Cervus_filipjevi,Rhacophorus_grus),Cynops_intermedia),((Dryobates_tatarica,Totanus_caudata),Tupinambus_middendorffi)),Erpeton_mutabilis),Rhamphiophis_porphyrio),Xenophrys_pallidus))),((((((((((((((((((((((((Acheron_mugodjaricus,((((Archispirostreptus_diadema,(Bombus_salei,Coregonus_cristatellus)),Lystrophis_opimus),Pelusios_himantopus),Hemitheconyx_eremita)),(Oedura_politus,Tylototriton_salamandra)),Elseya_melanuroides),Chamaeleo_climacophora),Zosterops_nelsonii),Corytophanes_leschenaultii),((((((((Almo_saiga,(Bombycilla_maurus,Cyriopagopus_edulis)),Buthus_xanthocheilus),(((((Brachypelma_sieboldii,Chondropython_soloensis),(((Chrttusia_zagrosensis,(Eudrornias_doctus,Nhandu_oenanthe)),Furcifer_verrucosus),Mabuya_pelagicus)),((((Cyclemys_mlokosiewiczi,Vanellus_bedriagai),(Limnodromus_tanganicus,Tamias_tinctorius)),Uroplatus_madagascariensis),(Rissa_oedicnemus,Sorex_heterolepidotus))),(Gypaetus_bonasus,Mogera_krueperi)),Limosa_subrufa)),Coenobita_guttifer),(Fuligula_jaspidea,Limnodromus_taczanowskius)),(Coleonyx_macularius,Sericinus_radiata)),Cyclemys_ceterus),Elaphe_ochropus)),((((((Ameiva_cornix,Zosterops_altaica),Ctenosaura_mexicanum),(((((Aphonopelma_moschata,Hottentotta_decor),(Kinixys_nasuta,Xenochrophis_irregularis)),Pusa_tetrix),Cyriopagopus_leuconotus),(Ciconia_bairdii,Epicrates_rufus))),Argynnis_serpentina),Motacilla_classicus),(Eumeces_vulgaris,Ninox_peregrinus))),Platalea_caelebs),Rufibrenta_botnica),(Enhudra_prasina,Nucifraga_pedo)),((Chrysopelea_rostratus,Synthliboramphus_madagascariensis),crecca_ochropus)),Hemiscorpius_fallax),(Lepidobatrachus_rusticolus,Mabuya_totanus)),Gyps_caudolineatus),Platalea_guttata),((Lasiodora_triangulum,Minipterus_uncia),Osteopilus_torquata)),(((((Alloporus_latiscutatus,Eschrichtius_schneideri),(Tetraogallus_lutra,Tiliqua_carbonaria)),Cottus_terrestris),(Fulica_fuellebornii,Homopholis_cingulata)),Ceratophrys_turtur)),((Corvus_purpurascens,((Megophrys_savignii,Strepsilas_noctua),Micropalama_graculus)),Odobenus_blakistoni)),Sus_anatina),((Ameiva_chinensis,Larus_cioides),Sturnus_eximia)),Upupa_avosetta),Synthliboramphus_hendricksoni),((((Eumeces_rufus,Syrrhaptes_ornata),Hysterocrates_squamatus),Plethodon_meermani),Gecarcinus_indica))),(Gekko_galeatus,Gerrhosaurus_melanostictus)),Bos_sanguinolentus),Streptopelia_chuatsi),(Allactaga_caryocatactes,Eucratoscelus_sauromates)),Sterna_acuta),Castor_fimbriatus),(Eudramias_haliaetus,Tylototriton_casualis)),((((((Antilope_floridana,Capreolus_griseus),Tupinambus_gregarius),Siniperca_fimbriatus),((Certhia_jacksoni,Scolopax_insignis),(Lycodon_fuellebornii,(Mabuya_lividum,Pelusios_nivalis)))),Capeila_Bernicla),((((((Boiga_flavomaculatus,Pleurodeles_rufodorsata),Phasianus_taxus),(((((Budytes_galactonotus,Paraphysa_murinus),Testudo_maldivarum),((Eudrornias_guineti,((Hirundo_schokari,Tetraogallus_geniculata),Mochlus_sagrei)),Lepus_atthis)),((((((Chelus_bifasciatus,(Cygnus_aceras,Pseudemys_dendrophila)),Crotaphytus_botnica),(Phrynohyas_mystacinus,Querquedula_moschiferus)),Underwoodisaurus_crucigera),(Chelydra_purpurascens,Ruticilla_collaris)),Chlidonias_arizonensis)),Lamprophis_tatarica)),Kassina_czerskii),(Hydrosaurus_chamaeleontinus,Turdus_laevis)),(Bombina_fissipes,Larus_zonata)))),(Chelus_wogura,Tryngites_fluviatilis)),Hydrosaurus_zonata),Cottus_vastus),(((((Aphonopelma_argentatus,Ephibolus_aegagrus),((Gonyosoma_vertebralis,(((Iomachus_pictus,Saxicola_albicilla),Spalax_brevirostris),Ursus_vipio)),Mustela_rhymnus)),Pyxicephalus_albirostris),(Homopholis_eximia,Philacte_vulpes)),Melanocorypha_giganteus)),((((Alpes_maihensis,(Aythya_montela,Kinixys_similis)),(Chlidonias_rutilans,Phrynocephalus_subrufa)),(Eirenis_smithii,Ophisops_guttifer)),Pituophis_deminutus)),Pyrgilauda_hemilasius),Eucratoscelus_musicus)),Rhombomys_squaterola),(Acanthoscurria_trigonopodus,Hyla_deserti)),((Ardea_torquata,Thamnophis_sibiricus),(Capella_tolai,Heteroscodra_valliceps))),Rissa_bimaculata),Dendrelaphis_horridum),Scaphiophryne_nasicus),((((((((Citellus_rubida,crecca_hemilasius),(Gazella_dactylisonans,((Leiopython_livia,Paraphysa_fuliginosus),Tetrao_alcinous))),Squaterola_bengkuluensis),(Neolycaena_riparia,Pedostibes_infrafrenata)),Salamandra_korschun),(Limnodromus_milii,Motacilla_sepsoides)),(Corallus_aureola,Iguana_mlokosiewiczi)),Pyrgilauda_leucogeranus)),(Allactaga_medirostris,((Boiga_plathyrhychos,(Eudrornias_aegyptia,Ortigometra_ferina)),Kaloula_sujfunensis)))),Squaterola_unicolor),(Procellaria_atriceps,Python_melleri)),((((Aix_americanus,(Eudrornias_subcinctus,Hydrosaurus_breitensteini)),Tylototriton_diffidens),(Ephibolus_standingii,Odonthurus_sanguinolentus)),Bradyporus_docilis)),(((Alauda_brachydactyla,Homopholis_taczanowskius),(Hysterocrates_leucoptera,Phrynosoma_caerulea)),Sturnus_glacialis)),(((Buteo_tentaculatum,Dendrelaphis_mlokosiewiczi),Saxicola_hirundo),Pusa_brevipes)),(((((((Anodonta_hongkongensis,Terpsihone_diadema),Odobenus_situla),Oxyura_caucasicus),Corallus_caudata),(((Dryobates_completus,(Gazella_docilis,Hottentotta_caryocatactes)),Homopholis_purpurascens),Gonyosoma_valliceps)),(Anolis_chinensis,Vormela_sp)),Psalmopoeus_mysticetus)),Rissa_avinivi),Brachyramphus_lavaretus),Gazella_gibbosus),Pyrrhocorax_marinus),Bradypodion_anatina),Argynnis_cranwelli),Acanthis_calligaster),(Eubalaena_sanguinolentus,((Falco_bedriagai,Monachus_oedicnemus),Vanellus_clericalis))),(((Capella_macularius,(Nyctixalus_leucopsis,Phormictopus_aleutica)),Pachytriton_turtor),Lamprophis_glareola)),(Bradypodion_sibilans,((((Chlamydosaurus_plathyrhychos,Lyrurus_bicinctores),Phoca_ichthyaetus),(Gyps_deminutus,Hysterocrates_proteus)),Poephagus_belliana))),Petrocincla_lagopus),Apodora_stylifer),Bradyporus_fulvus),Spalax_avosetta),Syrrhaptes_vanellus),Platalea_vitulina),(Anas_equestris,Xenophrys_jaculus)),Phyllopneuste_calyptratus),((Chrysopelea_garulla,sibiricus_temminckii),Nipponia_bengkuluensis)),(((Certhia_ibera,(Rhodostethia_naumanni,Triturus_triangulum)),Rhodostethia_avocetta),Ctenotus_sauritus)),Tursiops_sp),((Anodonta_cristatus,Bradypodion_dispar),(Leiopython_kraepelini,Nerodia_hasselquistii))),Asthenodipsas_weberi),Capella_indica),Margaritifera_vermiculatus),Aythya_lutris),(Pareas_galeatus,Porphyrio_marmoratus)),(Androctonus_interiorata,Lepus_auriculatus)),((Hysterocrates_altaica,Plethodon_davidiana),Ursus_leporosum)),Acanthosaura_papuana),(((Acheron_taczanowskius,(Mergus_mlokosiewiczi,Rhesus_milii)),Underwoodisaurus_onocrotalus),Siniperca_opimus)),((Arenaria_parvus,Net_albigula),Querquedula_coturnix)),Anthropoidae_pallasii),Remiz_buccata),(((((Corvus_collaris,(Holaspis_gebleri,Sceloporus_punctatus)),Saiga_chrysaetos),Porphyrio_monilis),Parabuthus_physalus),Rufibrenta_subrubrum)),Lasiodora_guttifer),(((Acanthoscurria_caudicinctus,(((((Apalone_caeruleus,Nyctixalus_ussuriensis),(Paradoxornis_prasina,Ruticilla_Jankowskii)),Pituophis_aegyptia),Leiurus_sanguinolentus),Pogona_arenarius)),Mochlus_leucoryphus),Rhacodactylus_spinifera)),Anodonta_minutus),(((((((((((((Acanthoceros_enhydris,Carabus_tinnunculus),Acipenser_pedo),((((((((((((((((Acanthogonatus_wumuzusume,Grampus_ammon),Theloderma_salei),Ursus_adamsii),Vulpanser_dorsalis),(Anas_rufina,Selenocosmia_calligaster)),(((Bubulcus_clypeatus,Lutra_cyanus),Eudramias_paradisi),(Dasypeltis_getula,((Pelusios_proteus,Synthliboramphus_oenanthe),Xenochrophis_baeri)))),Circus_korschun),Rhacophorus_imperator),Pachytriton_franckii),(((((((((((Aegialifes_mlokosiewiczi,((((Amphiuma_cranwelli,Eucratoscelus_fernandi),Castor_nelsonii),Pagophila_parvus),Rissa_macularius)),Carabus_vastus),Cygnopsis_ibera),(Camptoloma_taeniura,Circaetus_odoratus)),Hottentotta_sebae),Glareola_perdix),Eucratoscelus_peregrinus),Eubalaena_eremita),Gazella_montela),Apodora_bedriagai),((((Allactaga_glaucescens,(Capreolus_walti,Emberiza_xanthocheilus)),(Bradypodion_barroni,(Pelodytes_insignis,Physignathus_hyemalis))),Sceloporus_cancerides),Pterinochilus_pallidus))),Spalerosophis_fasciolata),Basiliscus_nivicola),Mabuya_modestus),Chrysemys_gecko),Balaenoptera_marcianus),Philothamnus_melanostictus)),(Grus_fulvus,((Nyctixalus_oenanthe,Saga_cancerides),Passer_carolinensis))),(((Alaus_semipalmatus,((((Balaena_ferina,Pedostibes_smaragdina),Paramesotriton_aceras),Lampropeltis_cyanogaster),Ketupa_mutabilis)),Osteopilus_moschata),((((Alloporus_collybitus,(Lamprophis_manul,Lycaenopsis_kopsteini)),Hydrochelidon_lividum),(Anodonta_deminutus,Antaresia_schneideri)),(((Branta_casualis,Pareas_subniger),Chondropython_gecko),(((Branta_erythronota,Sturnus_laevis),Grampus_cachinans),Chen_serricollis))))),(((((((((((((((Agama_vertebralis,Kinosternon_grandis),(Mylopharyngodon_glottis,Tetrao_doctus)),Latastia_chuatsi),Avicularia_insularis),(((Coenobita_grossmani,Cuculus_wislizeni),Larus_naumanni),Oligodon_insularis)),(Camptoloma_carnivorus,((Chrysemys_maldivarum,(Falco_dominicus,(Geochelone_collaris,Ziphius_minor))),Perdix_virgo))),((((((((((((((((((((((Alectoris_coelestis,Eudramias_indica),Lyrurus_similis),Oceanodroma_chrysargos),Pseudemys_manul),Chelus_maritimus),Rhodostethia_giganteus),(Aythya_melonotis,(((Eryx_arvensis,Rhabdophis_calligaster),Halichoerus_xanthocheilus),Nipponia_tetrax))),Sus_tigrinus),(Ameiva_lutra,Gypaetus_oxycephalum)),Bombyx_sibilans),(Boiga_tricolor,Machetes_oxycephalum)),(Litoria_venulosa,Theloderma_coelestis)),(((Chrttusia_rhymnus,Nhandu_nivicola),Heteroscodra_fimbriatus),Pseudemys_galericulata)),(Brachypelma_clericalis,Nyctaalus_platyrhinos)),Philomachus_vanellus),Chelus_lineatus),Teratoscincus_tatarica),Sturnus_hungaricus),Pyrgilauda_kazanakowi),Citharacanthus_reticulatus),((Nemachilus_picta,Querquedula_amboinensis),Tupinambus_oenanthe)),((((((((Anodonta_corone,Cinclus_caudolineatus),Bombyx_korschun),(Madagascarophis_carbonaria,(Megaloperdix_sanguinolentus,Nyctixalus_flavirufa))),Enhudra_albocinctus),Perdix_paganus),(Phasianus_cristatella,Scolopax_sanguinolentus)),Neolycaena_carinatus),Aplopeltura_fasciata))),(((((Elaphe_acanthinura,Sphenops_zagrosensis),Tetraogallus_adamsii),Nemachilus_angustirostris),Scolopendra_nigrolineatus),((Hydrosaurus_meles,Philothamnus_sp),Mabuya_atthis))),(Alectoris_auriculatus,(Pterinochilus_saxatilis,Ptyodactylus_atrigularis))),Epicrates_variabilis),(Alaus_battersbyi,Archispirostreptus_viridis)),Grammostola_africanus),Balaenoptera_grossmani),Almo_classicus),Rissa_franckii)),(((((Allactaga_bengalensis,Trachemys_caeruleus),Anodonta_helvetica),Regulus_crispus),(Apus_zagrosensis,Phasianus_variabilis)),Amphiuma_tadorna)),Monodon_cingulata),Cuora_climacophora),Ruticilla_lehmanni),((Cyriopagopus_dennysii,crecca_guentheri),(((Lampropeltis_rudicolis,Lystrophis_interpres),Natriciteres_bukhunensis),Ptychozoon_franckii))),(Cyclagras_gobio,Marmota_lutris)),Avicularia_strepera))),Apalone_arseniavi),Tupinambus_mystaceus),Pelomedusa_albocinctus),((((((((((((((((((((((((((Allactaga_arcticus,Bufo_glareola),Sorex_angustirostris),Phalacrocorax_cliffordii),Leiopython_tenuirostris),Bombycilla_pyromelana),(Ctenotus_fuliginosus,(Cygnopsis_mystacinus,(Geochelone_stagnalis,(Otis_garmani,Vipera_perrotetii))))),Lobipes_tenuirostris),(((((((((Anthropoides_weliczkowskii,Streptopelia_rupestris),((((Bombina_middendorffi,Haplopelma_alcinous),Hadogenes_plumifrons),Psammophis_dactylisonans),(Oxyura_fiber,Recurvirostra_salvator))),Chettussia_vertebralis),(Chamaeleo_femoralis,Ptyodactylus_standingii)),Saxicola_helena),(((Eunectes_hasselquistii,Norops_aegagrus),Heterodon_bicoloratum),Nemachilus_pusilla)),(((Canis_tigrinus,Varanus_tatarica),Hemitheconyx_fasciolata),Megaloperdix_casualis)),(((Babycurus_agama,Epicrates_piscator),(((Buthacus_naumanni,Sterna_difficilis),Gonocephalus_pelagicus),Pelodiscus_leptochelis)),Bos_terrestris)),Thymallus_galactonotus)),((Bronchocela_dorsalis,Glareola_septentrionalis),Regulus_colubrinus)),Dyscophus_angustirostris),((Ceratophrys_pelagicus,Thymallus_argali),Emydura_melleri)),Damon_scrofa),Philomachus_cavimanus),(Haliaetus_constricticollis,Phrynocephalus_godlewskii)),Lyrurus_pardus),((Dafila_sirtalis,((((Hadogenes_alpina,Pseudemys_doctus),Limnaeus_edulis),Hysterocrates_brachydactyla),Mabuya_gemmicincta)),Trionyx_serricollis)),Bronchocela_mandarina),(Cyclagras_karelini,Phalaropus_tarda)),Apalone_anachoreta),Bufo_communis),Bronchocela_tatarica),(Balaenoptera_terrestris,Eudrornias_marcianus)),(((Argynnis_amboinensis,(Argynnis_krueperi,Mergus_dubius)),((((((Bombina_capra,Coleonyx_mandarina),Diomedea_himalayanus),Upupa_glottis),(Calidris_margaritifera,((Chrttusia_temminskii,Psalmopoeus_salvator),Sceloporus_medici))),Triturus_orientalis),Citellus_dahurica)),Saxicola_emarginatus)),Moschus_carolinensis),(Leptobrachium_glutinosus,Scincus_govinda)),Pica_blakistoni)),Falcipennis_africanus),(((Aegypius_ridibundus,((Allactaga_rubicola,(Emydura_emilia,Squaterola_gordoni)),Lobipes_mackloti)),(((((Alaus_arizonensis,(Lobipes_kuhli,Tadarida_semipalmatus)),(Calotes_blythi,Scaphiophryne_fernandi)),Rhynchaspis_bellii),((((((((Callipogon_ceterus,Coleonyx_martensi),Thamnophis_percnopterus),Fregilegus_collectivus),Vanellus_monoceros),Cyclemys_gregarius),Testudo_scalaris),Spermophilus_dulkeitiana),Hydrochelidon_fiber)),Anodonta_gratiosa)),Antilope_rufina)),Callipogon_deremensis),(((Apodora_guttata,Boa_physalus),(Turdus_mycterizans,Zosterops_terrestris)),Hadrurus_barbatus)),((Agama_mirabilis,Anolis_leucoptera),((Coturnix_quadrivirgata,Haplopelma_melonotis),Nipponia_bicinctores))),(Moschus_mysticetus,Telescopus_saxatilis)),Phalacrocorax_squamatus),Dipsosaurus_colubrinus),((Kinosternon_multifasciata,Sterna_tetrax),Rhodostethia_tataricus)),Butastur_rubida),Trachemys_grunniens),((Bombyx_gordoni,(Gallinago_gemmicincta,Trachemys_scabra)),((((Cuora_reinwardti,Gallinago_zagrosensis),Phalacrocorax_situla),Damon_radiata),Pelecanus_corone))),((((((((((((((((((((Acanthogonatus_sinensis,(Madagascarophis_mexicana,Osmoderma_getula)),Anthropoidae_conicus),Arctomys_ochropus),(Bombycilla_apollo,(Dyscophus_aureostriata,Elaphe_dione))),Phelsuma_troglodytes),((((((Bos_rapax,Falco_guangxiensis),Cervus_nigropalmatus),Lasiodora_tigrinus),Phyllopneuste_colchicus),Crotaphytus_interiorata),((Dipus_serpentina,Rhesus_standingii),Triturus_timidus))),Teratolepis_armata),(((((((((Ahaetulla_turtor,((Boa_ferrumequinum,Hirundo_borealis),Bronchocela_avocetta)),((((((((((((Apus_prominanus,(Leiolepis_turneri,Osmoderma_flava)),Rhacophorus_australis),(Lystrophis_canus,Neolycaena_subminiatus)),Poephagus_veredus),Sitta_mackloti),Burhinus_lehmanni),(Budytes_miliaris,(((Cuon_meermani,Holodactylus_plumipes),((Dipus_moschiferus,Sphenops_temminskii),Phalaropus_galeatus)),(Milvus_gibbosus,Sitta_ferox)))),Gerrhosaurus_chuatsi),((((((((Chelydra_vertebralis,Parnassius_longicollis),Euspiza_salamandra),Macrorhamphus_nigriceps),(Cuon_jaspidea,Opheodrys_leucoryphus)),Minipterus_buccata),Crotaphytus_major),Underwoodisaurus_hardwickii),((Pseudorca_monorhis,Tadarida_fusca),Vulpanser_chrysaetus))),Grus_dubius),(Carabus_teniotis,Ziphius_borealis)),Hydrochelidon_maurus)),Tursiops_nippon),Norops_lutris),Bradyporus_nigriceps),(((((Cervus_celeber,Hadrurus_placidus),Mustela_unicolor),(Desnana_schrencki,Limnaeus_tarda)),Oxyura_lehmanni),Phrynocephalus_himalayensis)),Fuligula_albicilla),Capeila_kingii),Vulpes_duplex)),((Anodonta_pica,((Cuculus_ibera,Cuora_elaphus),Ursus_aspera)),(((Emberiza_avosetta,Pituophis_lasiopterus),(Perdix_corticale,Uncia_hypomelus)),Gyps_oedicnemus))),(Capreolus_cianeus,(((Castor_rufina,((((Chettussia_tuberculosus,Eremophila_altaica),Rangifer_similis),Plegadis_eximia),(Gerrhosaurus_ussuriensis,(Philomachus_exquisita,Ptychozoon_lobatus)))),Pyrrhocorax_glottis),Certhia_irregularis))),(((((((((Actitis_geyri,(Eubalaena_lineatus,Psalmopoeus_bicoloratum)),Telescopus_alcinous),((((Chrysemys_enhydris,Emberiza_vulgaris),Xenopeltis_hemilasius),Phrynomerus_carinata),Mylopharyngodon_cornix)),sibiricus_cyanochloris),(Capra_pygmeus,Pelomedusa_bedriagai)),Castor_dahurica),((Bronchocela_alpinus,Chrttusia_pygmeus),Leiolepis_nupta)),Atrophaneura_albicilla),(Archispirostreptus_maurus,Phrynops_fuscatus))),(Chelydra_meermani,Circaetus_erythronotus)),(Eudrornias_semipalmatus,Pusa_notaeus)),Mylopharyngodon_argentatus),(Hirundo_leucorodia,Pituophis_oxycephalum)),Spizaetus_sanguinolentus),Dipus_catenifer),(Anas_maculatum,Heterodon_serricollis)),((Leptopelis_sphenocercus,Vipera_temminckii),Ninox_haliaetus)),Buthacus_musculus)),Cyclemys_turneri),(((Acanthosaura_eburnea,(((((((((((((Actitis_clypeatus,(((((((((((((((((Aegialifes_communis,Monticola_apollo),Callipogon_iankowskii),Balaena_crispus),(((((Anolis_sibirica,(Dahurinaia_ovata,Morelia_arenarius)),Bombina_hilarii),Recurvirostra_carbonaria),Prunella_mutabilis),Rhabdophis_comicus)),Pseudorca_gallicus),Paradoxornis_korschun),Bradypterus_intermedia),Colaeus_leptochelis),Tadarida_kraepelini),Tupinambus_ruficollis),((Balaenoptera_leucoryphus,(Calotes_pachypus,Monachus_erythropus)),(Fulica_leucoptera,((Hydrochelidon_irregularis,(Mochlus_kingii,Nerodia_tolai)),Lagenorhynchus_circia)))),((((Almo_leuconotus,(Balaena_geyri,((Burhinus_fernandi,Selenocosmia_nasuta),((Eutamias_occitanus,Lepus_heliaca),(Leiurus_infrafrenata,Pusa_epops))))),(Chrttusia_venulosa,Osmoderma_breitensteini)),Coenobita_hypomelus),Spalerosophis_gecko)),Chlamydosaurus_boulengeri),(Anthropoidae_scincus,Odobenus_epops)),(Chelydra_situla,Ctenosaura_tadorna)),Damon_rapax),Rangifer_dulkeitiana)),((Argynnis_cynodon,Glareola_vulgaris),Grus_alba)),Platemys_circia),(((Brachypelma_crassicauda,(((((Dendrelaphis_calamita,(Pareas_plathyrhychos,Streptopelia_armeniacus)),Nyctaalus_gebleri),Lampropeltis_clinatus),Podoces_subrufa),Himantopus_celeber)),Iguana_perdix),(Chelodina_canus,(Emydura_ochropus,sibiricus_porzana)))),Columba_hypoleucos),Gypaetus_hendersoni),(Lycaenopsis_godlewskii,Parabuthus_torquata)),Asthenodipsas_sphenocercus),Margaritifera_ferina),Pseudemys_clarus),(Ctenosaura_lagopus,(Dyscophus_azureus,Picus_cachinans))),(Mabuya_heterolepidotus,Zosterops_perrotetii)),Falco_pardalis)),Gecarcinus_vertebralis),((Acipenser_eremita,(Machetes_albertisii,Spalax_leuconotus)),(Arenaria_miliaris,Ninox_longicaudata)))),Ctenotus_decor),Rhynchophis_orientalis),(Acipenser_ameiva,Aphonopelma_taczanowskius)),(Lutra_caninus,Osmoderma_plathyrhychos)),Cuculus_enydris),Bradypterus_ciliatus),Hemiscorpius_argali),(Cervus_cyanochloris,Megaloperdix_marcianus)),Aegialites_colchicus),Larus_Anas),Bradypodion_avocetta),((((((((((((Citellus_teguixin,Hydrosaurus_krueperi),Riparia_mlokosiewiczi),(Leiurus_cyanus,Myotis_constricticollis)),Iguana_czerskii),Xenochrophis_unicus),Panthera_castaneus),Ortigometra_aegyptia),Recurvirostra_punctatus),Monticola_terrestris),Eremophila_imperator),Leiocephalus_rosmarus),Scolopendra_armeniacus)),((((Boa_japonensis,(Nyctixalus_pachypus,Salamandra_sujfunensis)),Chelodina_versicolor),Terpsihone_tatarica),Regulus_arizonensis)),Onychodactylus_similis),((((((((((Aegialites_montela,Sceloporus_albirostris),(Monticola_pygmaeus,Parnassius_paradisi)),Ctenotus_quinquestriatus),(Gekko_carnifex,Nucifraga_franckii)),Ovis_africanus),Eumeces_amethistina),(Arenaria_communis,Gerrhosaurus_glaucescens)),Minipterus_molurus),((Androctonus_cliffordii,Mesoplodon_turneri),Gambelia_virgo)),((Apodora_enydris,Ziphius_varius),Dasypeltis_rostratus))),(Agama_sagrei,(Archispirostreptus_weberi,Grammostola_adspersus))),(((((((((Acanthosaura_bonasus,((Buthus_virgo,Sturnus_gregaria),((((Oligodon_politus,(Pandion_lutris,Rissa_lutris)),Selenocosmia_aleutica),Pusa_americanus),Tursiops_percnopterus))),Aix_leucotus),(Balaena_macrops,Vormela_scalaris)),Rhodostethia_dactylisonans),((((((((Bradyporus_fuscatus,((Calidris_giganteus,Oenanthe_torquatus),Totanus_amethistina)),Homopholis_leporosum),Chettussia_aestivus),(Hottentotta_melonotis,Testudo_albicilla)),Phalacrocorax_chamaeleontinus),Phyllopneuste_albatrus),Cuculus_irregularis),Grampus_fragrans)),Numenius_salvator),Sterna_japonica),Phasianus_aspera),((((((((((Alcedo_scincoides,Sphenurus_wumuzusume),Cottus_azureus),Himantopus_rufina),(Otis_leucorodia,Terpsihone_cocincinus)),(Bos_prasina,Fregilegus_glacialis)),Madagascarophis_euptilura),Querquedula_blythi),Laudakia_scalaris),(Dahurinaia_scincoides,((Eumeces_aeruginosus,Rhodostethia_garmani),Sterna_vereda))),Eudramias_nebrius))),(((Chrttusia_sauromates,((Ctenosaura_maritimus,Salmo_borealis),(Cuora_leucoryphus,Salvelinus_nigrolineatus))),Net_cavirostris),Osmoderma_filipjevi)),((((Babycurus_ferrumequinum,Himantopus_floridana),Remiz_tridactylum),Elaphe_indicus),Holodactylus_vertebralis)),Parus_aeruginosus),(((((Antilope_hosii,Xenochrophis_armata),Caiman_subruficollis),Lamprolepis_piceus),(Dipsosaurus_docilis,Perdix_prasina)),Lagenorhynchus_platycephala)),Scaphiopus_means),(Leiolepis_plumifrons,Rhinolophus_sinensis)),Pleurodeles_vulpes),((Heteroscodra_arizonensis,Mochlus_guttifer),Pedostibes_sibirica)),Buthacus_keyzerlingii),(Cuon_armeniacus,Pandion_diffidens)),Vormela_vastus),Sorex_ceterus),(Branta_radiata,(Eutamias_elegans,Lampropeltis_lesueurii))),(((((((((((((Accipiter_modestus,Camptoloma_plathyrhychos),(((Chettussia_marmorata,Desnana_eulophotes),((Chrysopelea_elaphus,Holodactylus_aeruginosus),(Saxicola_spaldingi,Squaterola_davidiana))),Trachemys_politus)),Chrysemys_fulvus),Eulabeia_flavigularis),((Brachyramphus_tentaculatum,Scolopax_monachus),Pica_subrufa)),(Burhinus_aristotelis,Rufibrenta_paganus)),Net_maculatum),(Ceratophrys_eburnea,Polypedates_deminutus)),(Lepidobatrachus_completus,Pseudorca_citrsola)),(((((((((Agama_japonensis,Vipera_teniotis),(((((Castor_vittatus,(Chlamydosaurus_taezanowskyi,Leiopython_miliaris)),Hyperoodon_subniger),(Gallinago_xanthocheilus,Ninox_avicularia)),(Castor_vulpes,Phrynosoma_lividum)),Eubalaena_arcticus)),Ortigometra_bimaculata),((Athene_flavescens,(Haplopelma_hemilasius,Scolopendra_veredus)),Certhia_sibiricus)),Liasis_purpurascens),Rissa_hyperboreus),Nhandu_macrops),Syrrhaptes_kazanakowi),Grammostola_maldivarum)),Squaterola_diffidens),Chalcides_vittatus),(((Boiga_dione,Parnassius_rutilans),Chlamydotis_cyanogaster),Philothamnus_taeniura))),Aythia_uluguruensis),((Ketupa_himantopus,Phormictopus_madagascariensis),Scolopendra_hemionus)),(((Alloporus_plathyrhychos,((Citellus_armeniacus,Tupinambus_maculata),Phrynomerus_microlepis)),Castor_molurus),(Bradyporus_haliaetus,Chelodina_ion))),Ophisops_turtur),(Aquila_dispar,(((Bradypodion_perrotetii,Vormela_graeca),((((((Burhinus_politus,Holaspis_auriculatus),Parnassius_scrofa),Telescopus_cioides),Rhabdophis_pulchripes),((Chrttusia_insignis,Leiolepis_cristatus),Trionyx_murinus)),Eremophila_gallicus)),Capeila_guentheri))),(Porphyrio_colubrinus,Saga_guttifer)),((((((Eubalaena_lagopus,Gyps_subruficollis),Leiocephalus_canagica),Phrynocephalus_jacksoni),Neolycaena_galeatus),Podoces_sepsoides),Sterna_brachydactyla)),(((((Alopex_leporosum,Vanellus_pygmaeus),((Coregonus_giganteus,((Pandinus_macrops,Squaterola_albigula),Selenocosmia_australis)),Cyclemys_saxatilis)),((Balaenoptera_lepturus,Gekko_helvetica),((Budytes_jaculus,((Buthus_stimsoni,Middendorffinaia_vermiculatus),Hirundo_ammon)),Eutamias_moschata))),Caiman_modestus),Eubalaena_leucomystax)),Acanthosaura_vipio),Equus_stagnalis),Moschus_atrigularis),((((((((((((((Accipiter_scincoides,(Allactaga_minutus,Marmota_oedicnemus)),Hemitheconyx_hispida),((((Bombyx_clarus,Haplopelma_aeruginosus),Leiopython_geniculata),Chrysopelea_caudatus),Osmoderma_pachypus)),Vanellus_cyanus),(((((Falcipennis_castus,(Phormictopus_decorus,Tropidurus_noctua)),(((Kaloula_classicus,Myotis_bifasciatus),Salamandra_torquatus),Squaterola_cambridgei)),Lobipes_caesius),Scolopendra_triangulum),Seokia_plumifrons)),Python_graeca),Zosterops_gordoni),((Calidris_blakistoni,(Erpeton_fluviatilis,Vormela_quadrivirgata)),Hemiscorpius_corticale)),(Chlamydotis_salamandra,Pyxicephalus_cancerides)),Leiolepis_teniotis),Phrynohyas_himantopus),(Capra_mexicanum,Iguana_caryocatactes)),Natriciteres_radiata),Arctomys_gallinago))),(Aix_noctua,Corytophanes_avinivi)),Theloderma_hirundo),(((Dahurinaia_cinereus,Gecarcinus_minor),Spermophilus_crucigera),(((Kassina_indicus,Ursus_ammon),Scaphiophryne_carinatus),Upupa_fluviatilis))),(((((((Acanthis_celeber,Monachus_indicus),Eutamias_ichthyaetus),(Bronchocela_pardus,Heterodon_ochropus)),(Nyctaalus_walti,Pachytriton_hilarii)),((Accipiter_nivicola,(((Aegialifes_rufodorsata,Kinixys_dennysii),(((((Apus_major,(Ctenosaura_schneideri,((Cygnus_mutabilis,Tiliqua_zagrosensis),(Natriciteres_lesueurii,Phalaropus_pardus)))),((((Certhia_nivicola,(Erpeton_exquisita,Leptopelis_nivicola)),(Hyla_femoralis,Lanius_tetrax)),(((((Ciconia_alcinous,((Citharacanthus_angustirostris,Haliaeetus_haliaetus),Uroplatus_agama)),Iomachus_arvensis),Philomachus_leucocephala),Eubalaena_amboinensis),Phormictopus_leucotus)),Tursiops_obsoleta)),((Budytes_hendersoni,Gallinago_pyromelana),Teratoscincus_bengalensis)),((((Arenaria_aspera,(Casarca_crocodilus,Lasiodora_savignii)),(((Cyclemys_mitratus,Eutamias_margaritifera),Tropidurus_labiatus),Pterocles_crocodilus)),Streptopelia_jubata),Budytes_eburnea)),(Colaeus_moschiferus,Vulpanser_mlokosiewiczi))),Oxyura_dubius)),Phylloscopus_falcipennis)),((((((((((((((((((((((((((Acanthogonatus_porphyrio,(Pseudorca_bengkuluensis,Pyrgilauda_catenifer)),((((Aegialifes_pholeter,(Columba_canus,Minipterus_cristatella)),Lycaenopsis_boschas),(((Emberiza_nebrius,Parnassius_crispus),(Osteopilus_troglodytes,Saga_jacksoni)),Lepidobatrachus_arizonensis)),Rissa_ochropus)),Scaphiopus_caninus),((((((((Alloporus_smithii,Capella_subniger),(Cervus_ulikovskii,Hirundo_japonica)),Remiz_cingulata),Capreolus_bairdii),Cynops_hyemalis),Pedostibes_daurica),(Salamandra_flava,Strepsilas_tinnunculus)),Philomachus_porzana)),(Epipedobates_ridibundus,Vipera_rutila)),((Dasypeltis_collectivus,Net_chamaeleontinus),Equus_circia)),Teratolepis_vitticeps),Capreolus_flavolineata),Kaloula_oenanthe),(Eschrichtius_lasiopterus,Pelusios_leptochelis)),((((((((((((Acheron_vipio,Phrynops_godlewskii),((Alcedo_caeruleus,Mustela_nelsonii),Vormela_vitulina)),((Epipedobates_circia,Limnodromus_guttifer),Megaloperdix_clypeatus)),((Bradypodion_naumanni,crecca_flammea),Kinixys_solitaria)),Odonthurus_ciliatus),((Apodora_eremita,(Felis_paradoxus,Polypedates_scrofa)),((Balaena_pulchra,(Scolopendra_pygmaeus,Ziphius_citrsola)),(Bronchocela_cavimanus,Phrynops_clericalis)))),((Bombus_celer,Monodon_albopillosum),Ovis_fimbriatus)),(Corvus_radiata,(Ortigometra_adspersus,Pratincola_medici))),((((((((((((((((((((Actitis_bicinctores,((Anas_molurus,(((Buthacus_gibbosus,((Emydura_nupta,Eucratoscelus_korschun),Heterodon_cynodon)),Chelus_papuana),Plethodon_doctus)),(((Eryx_tigris,Uncia_riparia),Ingerophrynus_kopsteini),Falco_gebleri))),Pachytriton_murinus),((Gavia_spilota,Morelia_catenifer),Thecla_deserti)),(((((((((((((((Ahaetulla_epops,(((((((Allactaga_caudata,Pachydactylus_japonica),Lepidobatrachus_mongolica),Grus_plathyrhychos),((((((((((Antilope_holbrooki,Sus_anser),Castor_rubida),(Boa_kurilensis,Pleurodeles_colombianus)),Leiocephalus_labiatus),Rhacodactylus_graculus),(Eurynorhynchus_isabellina,Ptychozoon_albatrus)),Lamprophis_giganteus),Homalopsis_perrotetii),Coenobita_punctatus),Cygnus_spinifera)),Grampus_coloratovillosum),(Bombyx_leucogeranus,Furcifer_medici)),Argynnis_oenanthe)),Psalmopoeus_prasina),((Gekko_apus,Gyps_scincoides),Tadorna_pholeter)),Fuligula_difficilis),Platalea_viscivorus),(((Anthropoides_shadini,(Fulica_scutulata,Ophisops_sinensis)),(((((Balaena_fragrans,Bombyx_picta),Chalcides_miliaris),Leiolepis_nipalensis),Phasianus_piceus),Felis_pyromelana)),Dahurinaia_amboinensis)),Phrynops_venulosa),Apus_regius),((((Fulica_hilarii,Recurvirostra_galeatus),Plegadis_hendricksoni),(Pelodytes_martensi,(Tryngites_javanica,Tupinambus_nigrolineatus))),Leiopython_trianguligerus)),Rhacophorus_sanguinolentus),Chrysemys_glareola),Strepsilas_totanus),Corvus_taxus),Natriciteres_viscivorus),Mylopharyngodon_mystaceus)),Hirundo_aleutica),Apodora_cygnus),Diomedea_rostratus),(Aegialifes_ridibundus,(Dasypeltis_ciliatus,Melanocorypha_erythronota))),(((((((((((Aegypius_castaneus,Sceloporus_borealis),Pandinus_eburnea),((Calidris_proteus,Pyrrhocorax_dispar),Sorex_insularis)),((Cyriopagopus_novaeguineae,Eschrichtius_aspera),Hydrochelidon_paganus)),((Hadogenes_odoratus,Siniperca_parvus),Phrynocephalus_pygargus)),Lyrurus_arenarius),Grammostola_pelagicus),Arenaria_ciliatus),Eunectes_clypeatus),((((((((((((Agama_tadorna,Homopholis_wumuzusume),(Amphiuma_pugatshuki,Dahurinaia_naumanni)),((Buthacus_aceras,Gerrhosaurus_taxispilota),Philacte_leucopsis)),Cervus_hyemalis),Scaphiophryne_ibera),Damon_vitticeps),Melanocoryhpa_ridibundus),Meles_glottis),(Coleonyx_minutus,Hyla_mnemosyne)),(((((Alauda_mutabilis,((Aphonopelma_leporosum,(Kinixys_clarus,Litoria_pygargus)),Aquila_guineti)),Boa_pygmeus),Balaenoptera_unicolor),Cyclagras_bengkuluensis),Felis_corsac)),Hadrurus_insularis),((Capella_riparia,Python_decorus),((Hemitheconyx_nigropalmatus,Pusa_constricticollis),Testudo_helvetica)))),Teratolepis_bicinctores)),Hadrurus_gratiosa),(Dendrobates_vipio,Nemorhaedus_gobio)),((Ambystoma_horridum,Phrynocephalus_rufus),Latastia_carolinensis)),Cervus_milii),Sphenurus_gemmicincta),((Babycurus_lobatus,Ovis_cristatellus),Pratincola_caelebs)),((((Anthropoidae_kurilensis,(((((Avicularia_sinensis,Physignathus_tricolor),Lamprolepis_geniculata),(((Buteo_buccata,Vulpanser_odoratus),(Chlamydotis_docilis,(Grus_leucocephala,(Leptobrachium_moschata,(Litoria_sp,Tamias_grunniens))))),Tylototriton_ocellatus)),Siniperca_aeruginosus),Selenocosmia_exanthematicus)),(Buthus_exquisita,(Odobenus_weberi,Pusa_hongkongensis))),(Phrynomerus_dominus,Pterinochilus_leucogeranus)),Lamprolepis_seemani)),(((Cyclemys_tricolor,Phrynops_serpentina),Underwoodisaurus_kuhli),Falcipennis_semipalmatus)),Gazella_anatina),Epipedobates_armeniacus),(((((((((Allobates_rusticolus,(Apalone_apollo,(Phalaropus_solitaria,crecca_troglodytes))),Branta_dispar),(((Bufo_cavirostris,(Gavia_eremita,Scolopendra_infrafrenata)),Limnodromus_maritimus),Polypedates_aegagrus)),Eremophila_cianeus),(Pareas_tenuirostris,Phrynops_unicus)),(Oenanthe_wislizeni,Rhacodactylus_casualis)),Natriciteres_helvetica),Falcipennis_pulchripes),Nyctaalus_arvensis))),(Nipponia_mlokosiewiczi,Ziphius_rudicolis)),((Chen_mystacinus,(Haliaetus_morinellus,Homalopsis_reinwardti)),((((Chettussia_xanthocheilus,Sus_guentheri),Lutra_garulla),Passer_cavirostris),(((Eubalaena_emilia,Ortigometra_subruficollis),Perdix_garmani),Mogera_grunniens)))),(Butastur_cristatellus,Rhabdophis_exquisita))),Odobenus_glacialis),(((((Acanthosaura_rutila,Cuora_brevipes),Coturnix_fasciata),Accipiter_canagica),Alloporus_tataricus),Philacte_percnopterus)),Brachypelma_angustirostris),Dipsosaurus_duplus),(Anodonta_grupus,Falco_undulata)),Bombyx_caudatus),(Nemachilus_dentatus,Tylototriton_guineti)),Phoca_porphyrio),(Grampus_striatus,Lamprolepis_bairdii)),((Chelodina_agama,(Oceanodroma_fiber,Turdus_bewickii)),Holaspis_clinatus)),Chlamydotis_hispida),Cyclagras_mackloti),((((((((((Aix_galeatus,Cottus_gregarius),Osteopilus_fiber),Pelodiscus_modestus),Capreolus_nyroca),(Hadrurus_flavigularis,(Homalopsis_horridum,Oedura_castaneus))),Syrrhaptes_caudolineatus),(Lepus_grossmani,Tadarida_cherrug)),(Latastia_marmoratus,(Scolopendra_garmani,Varanus_viridescens))),Mylopharyngodon_armata),Allobates_pardalis)),Eschrichtius_metallica),((Eirenis_enhydris,(Rhabdophis_taczanowskius,Vormela_kingii)),Macrorhamphus_caniceps))),Paraphysa_longipennis)),Phelsuma_hemionus),(((((((((Amphiuma_mutabilis,(((Eunectes_grossmani,Lyrurus_adamsii),Xenopeltis_cyanogenys),Salamandra_galeatus)),Trachemys_limosa),Procellaria_nigrolineatus),(((Apus_maurus,Trionyx_guttata),(Athene_celer,(Cervus_platyrhinos,Liasis_regius))),Fulica_laevis)),(((((((Basiliscus_subruficollis,Rhabdophis_Jankowskii),Chlamydosaurus_alterna),Dasypeltis_caniceps),(Lepus_quadrivirgata,Riparia_arseniavi)),Moschus_isabellina),Mabuya_cristata),Cyclemys_peregrinus)),(Picus_bellii,Pleurodeles_insignis)),(Hyperoodon_cristatellus,Uromastyx_heliaca)),(Hydrochelidon_aleutica,(Pachytriton_armeniacus,Tupinambus_madagascariensis))),Poephagus_eulophotes)),Chen_viridescens),(((((((((((((((((((((Acanthogonatus_pulchra,Eubalaena_stagnalis),((((((((Acanthoscurria_salamandra,Lycaenopsis_means),(Columba_caeruleus,Ctenotus_pelagicus)),Megaptera_barbata),((((((((Accipiter_enydris,Capeila_trianguligerus),(((((((((((((((((((Anthropoidae_trianguligerus,((Chelodina_pusilla,Kassina_septentrionalis),Coturnix_doriae)),Chrttusia_melanostictus),Gypaetus_flava),Colaeus_piscator),Phyllopneuste_albopillosum),Polypedates_arvensis),(Myotis_regius,Sturnus_bengkuluensis)),Rhynchophis_aegagrus),Elaphe_yeltoniensis),(((Bradyporus_decorus,Pelecanus_glutinosus),Ceratophrys_ciliatus),Seokia_rupestris)),(Butastur_kazanakowi,Eunectes_albertisii)),(((Calidris_colombianus,(Chlamydotis_bedriagai,(Minipterus_salvator,Platemys_scalaris))),(Capra_bengkuluensis,Pratincola_bewickii)),Coregonus_plumipes)),Vormela_fasciolata),Capeila_mykiss),Ophisops_sanguinolentus),Phrynomerus_caudolineatus),Opheodrys_dendrophila),(Bronchocela_albocinctus,Dahurinaia_leucostomum)),Fregilegus_albirostris)),((((((((Brachypelma_alpina,Pleurodeles_carinata),Spalerosophis_nippon),Capra_leucophyllata),Odobenus_exanthematicus),Elseya_leucophtalmos),(Eumeces_wogura,(Falcipennis_cygnus,Haliaetus_clarus))),Cuora_caudatus),Sphenurus_subglobosa)),Pterinochilus_oenanthe),(Totanus_mlokosiewiczi,Xenophrys_korschun)),((Chettussia_monorhis,Grampus_physalus),Seokia_mystaceus)),(((((Ahaetulla_undulata,(Chelodina_sauritus,(Hysterocrates_turtor,((Machetes_flavolineata,Scincus_casualis),Philomachus_marcianus)))),Eudramias_jacksoni),Tringa_nippon),((((((((Anser_rudicolis,Ketupa_hendricksoni),Dahurinaia_atrigularis),((Colaeus_bobac,Rhombomys_fuscus),Paramesotriton_fuscus)),((((Crocodylus_borealis,(((Eunectes_temminckii,Oxyura_taezanowskyi),Phyllopneuste_albirostris),Himantopus_docilis)),Crocodylus_reinwardti),Hadrurus_tadorna),Lutra_merganser)),Uncia_rosea),Dendrobates_troglodytes),Pelecanus_modestus),(Paraphysa_cyanogaster,Phalaropus_taezanowskyi))),Phalaropus_peregrinus)),Dipsosaurus_intermedia)),(Emydura_picta,Net_arseniavi)),Gyps_indicus),Homopholis_pygmaeus),((Ardea_grus,Charadrius_brachydactyla),Oedura_classicus))),((Haplopelma_temminskii,Spermophilus_albertisii),Ziphius_tinnunculus)),Plethodon_cocincinus),(((((Cypselus_leucostomum,Trachemys_novaeangliae),Pseudorca_bairdi),Pagophila_rubida),Eumeces_subrubrum),Phrynohyas_cocincinus)),Rhinolophus_laevis),Dahurinaia_crispus),(((((Ameiva_nasuta,Gallinago_regius),Calotes_constrictor),(Pelodiscus_heterolepidotus,Porzana_pallidus)),(((Aquila_cinclus,(((Egretta_dentata,Pelecanus_rosea),Holaspis_nivalis),Xenochrophis_orientalis)),((((Buthacus_falcipennis,Testudo_bedriagai),(Litoria_cornix,Salmo_falcipennis)),Charadrius_carnifex),Margaritifera_vittatus)),(Limosa_cliffordii,Porphyrio_flavirufa))),(Lampropeltis_arseniavi,Leiocephalus_dentata))),((((Alopex_vertebralis,Lampropeltis_personata),(((Anthropoides_getula,Gambelia_lobatus),(((Balaenoptera_ferina,Mareca_albopillosum),Oedura_maihensis),(((Balaenoptera_korschun,Bubulcus_castaneus),((Corallus_bimaculata,Phrynosoma_cyanus),Eumeces_javanica)),Mogera_smithii))),Eremophila_spinifera)),((Capreolus_paganus,(Certhia_linaria,Pachydactylus_canorus)),Cygnopsis_citreola)),Bos_saiga)),Saiga_auriculatus),((((((Alauda_cinerea,((((Almo_melonotis,Pyxicephalus_bifasciatus),(Polypedates_emilia,Sceloporus_cyanogenys)),Pareas_madagascariensis),Epicrates_australis)),Bufo_tricolor),Madagascarophis_arcticus),Emberiza_vitticeps),Antaresia_mitratus),Ophisops_leucotus)),Capeila_miliaris),((Ethmostigmus_celer,(Lobipes_pulcher,Tamias_carinatus)),Rufibrenta_scalaris)),Certhia_cristatella),Tupinambus_rutilans),((((Homopholis_leiosoma,Paraphysa_collaris),Pseudemys_caelebs),Lyrurus_arseniavi),Pyrrhocorax_tarda)),Sphenurus_moschiferus),((((Athene_cinereus,(Budytes_erythrogastra,Phasianus_ovata)),Petrocincla_limosa),Totanus_eulophotes),(Theloderma_sudanensis,Tringa_cristatus))),Perdix_godlewskii),(Scorpio_leptochelis,((((((((Accipiter_mystacinus,(Leptobrachium_mnemosyne,Xenophrys_clarus)),Picus_graeca),((Ctenosaura_calvus,Opheodrys_homeana),Hemitheconyx_aureostriata)),Philacte_filipjevi),Vulpes_graeca),Larus_macqueni),Corytophanes_melanostictus),(Ketupa_gemmicincta,Lutra_deserti)))),(Fuligula_flavomaculatus,(Siniperca_homeana,Vormela_temminckii)))),(Tetraogallus_spaldingi,(((((Fulica_cepediana,(Spalerosophis_avocetta,Enhydris_rufina)),((((((Acanthogonatus_cristatellus,Chrysopelea_tuberculosus),((Candoia_agama,Eremophila_smithi),Certhia_holbrooki)),((((Alloporus_novaeangliae,((((((((Ambystoma_dactylisonans,Salmo_milii),((Aquila_gibbosus,Cyriopagopus_dentatus),Eudramias_tuberculosus)),Androctonus_viscivorus),Ctenosaura_querquedula),Bombyx_gallicus),((Chamaeleo_himantopus,(Enhydra_duplex,Osmoderma_weberi)),Remiz_pygmeus)),((Enhudra_dignus,(Halichoerus_coturnix,Kinixys_hardwickii)),Limnaeus_leucogaster)),Chlidonias_bedriagai)),(Norops_arizonensis,Tetrao_spaldingi)),Capeila_exquisita),((Egretta_leucostomum,(Parabuthus_middendorffi,Streptopelia_verrucosus)),Homopholis_scripta))),Lasiodora_dubius),(((((((Caiman_platycephala,(Latastia_azureus,Thamnophis_davidiana)),Ingerophrynus_pachypus),(((Falcipennis_zagrosensis,Lyrurus_fuellebornii),((Larus_leucogaster,Phrynosoma_calamita),(Rangifer_longipes,Seokia_opimus))),Spermophilus_fuscus)),Nerodia_decorus),Lycodon_himalayensis),Chrysopelea_nivalis),Citellus_rutila)),((((Falcipennis_atra,Turdus_schokari),Perdix_dispar),Pyrgilauda_peregusna),((Gambelia_marmorata,((((Gecarcinus_querquedula,(Nucifraga_circia,Phalaropus_medirostris)),Tylototriton_walti),Spalerosophis_angustirostris),(Gonyosoma_collybitus,Melanocoryhpa_mirabilis))),Pelecanus_maldivarum)))),((Tadarida_gibbosus,Plegadis_caryocatactes),((Oxyura_floridana,Rhabdophis_nigra),Accipiter_minor))),Sternotherus_marmoratus),((((Acanthis_enydris,Numenius_chrysaetus),(((((((((Atrophaneura_chukar,Chondropython_erythronota),Mareca_monedula),Rosalia_stejnegeri),Laudakia_davidiana),(Gongylophis_argentatus,Mesoplodon_monedula)),(Cuon_veredus,Rhamphiophis_gallicus)),Natriciteres_tolai),Dipsosaurus_interiorata),Psammophis_garulla)),(Moschus_aestivus,(Clemmys_fulva,Mesoplodon_pallidus))),((Damon_pusilla,Sorex_madagascariensis),Dipsosaurus_ciliatus))))),((((Oxyura_cyanus,(Aythia_pulchra,(((((Anthropoidae_getula,Eudrornias_lutris),((Brachypelma_vulgaris,Mergus_crocodilus),(Ptychozoon_insignis,Squaterola_cyanea))),((((Bradypterus_japonensis,Seokia_zagrosensis),Mesoplodon_torquatus),Cervus_campestris),Emydura_iguana)),(Ctenosaura_cianeus,Eryx_argentatus)),(Capella_meermani,Siniperca_javanica)))),(Enhudra_australis,(Bubulcus_hypomelus,Odonthurus_weberi))),((Epicrates_ameiva,Megophrys_armeniacus),(Gongylophis_bengalensis,Lampropeltis_flavescens))),(((Phrynops_schrencki,(Balaena_not,Bubulcus_chamaeleontinus)),((Ninox_dione,Totanus_Anas),Gerrhosaurus_hipposideros)),((Gongylophis_subrufa,Triturus_helvetica),(((((Cuora_tetrax,(Monticola_stejnegeri,(Pleurodeles_rupestris,Ctenosaura_canagica))),Anas_imperator),Callipogon_oxycephalum),((Grus_ion,Neophron_tridactylum),(Sitta_pulchripes,Monodon_gecko))),(Phylloscopus_mykiss,Phasianus_truncatus)))))),((((((((((Abantias_weberi,((((((((((((((((((((((((((((Acanthoceros_emarginatus,(Chettussia_altaica,Moschus_azureus)),(Branta_regius,Eulabeia_longicaudata)),(Atrophaneura_dennysii,Pyxicephalus_eximia)),(Hemiscorpius_musicus,Leiopython_auriculatus)),Chelus_trigonopodus),Petrocincla_cambridgei),Ketupa_irregularis),((((Aythia_fissipes,((((((((Branta_monoceros,(Pachytriton_stagnalis,Porzana_clypeata)),(Chrysemys_japonica,Citellus_tarda)),(Geochelone_monachus,Polypedates_sagrei)),(Larus_ovata,Mergus_colchicus)),Pleurodeles_carinatus),Latastia_rubicola),Gonyosoma_insularis),Uncia_carinata)),Balaena_lagopus),Scaphiophryne_brongersmai),((((Bombycilla_manul,(Pelodiscus_novaeangliae,Sterna_rusticolus)),Phrynohyas_carinatus),Leuciscus_fallax),((Grus_breitensteini,(Pusa_heliaca,Tadarida_jacksoni)),Motacilla_imperator)))),((((Aegialifes_arvensis,((Dipus_celer,Thecla_boyciana),Haliaetus_brandtii)),Syrrhaptes_coelestinus),(Chettussia_Jankowskii,Iomachus_atrigularis)),Monticola_tarandus)),((((((((((Acanthoscurria_stimsoni,Pandinus_leucophyllata),Chalcides_pugatshuki),Phrynops_canus),Theloderma_ferruginea),((((((Chrysemys_scalaris,Tetrao_heterolepidotus),(Cottus_viridescens,(((((Cyclagras_prominanus,Grampus_ion),Elseya_carinata),(Gambelia_cranwelli,Tamias_cliffordii)),Recurvirostra_atra),((Micropalama_agama,Rufibrenta_orientalis),Squaterola_opimus)))),Ursus_albopillosum),Scincus_cinereus),(Podoces_avosetta,Thamnophis_caerulea)),Ursus_limosa)),(Chelodina_vastus,((Cinclus_communis,Phasianus_montela),(Gecarcinus_caudata,Phrynocephalus_jaspidea)))),Holodactylus_microlepis),((((((Bombycilla_pholeter,Scolopax_corone),(((((Lamprolepis_ladogensis,Lepidobatrachus_stejnegeri),Lystrophis_bairdii),Margaritifera_subruficollis),crecca_grunniens),Neolycaena_griseus)),Pseudemys_nivalis),((Kinixys_monachus,Osteopilus_hilarii),Phyllopneuste_citrsola)),Scaphiopus_sibirica),Otocoris_dignus)),((Fregilegus_atthis,Pelomedusa_calamita),Vipera_grus)),Macrorhamphus_occitanus)),(((Anthropoides_rufus,Riparia_hodgsoni),(Leuciscus_tarandus,Philothamnus_parreyssi)),((Melanocorypha_cristatellus,Plethodon_rosea),Ninox_imperator))),Alectoris_scabra),(Eulabeia_coturnix,Nhandu_cristatella)),((Ovis_ameiva,Trapelus_sauromates),(Phormictopus_monachus,Rissa_marinus))),Citellus_maritimus),(Capra_diadema,Streptopelia_nigriceps)),Monachus_shadini),Neophron_leucomelas),Varanus_davidiana),Uncia_emilia),(Limnodromus_decor,Tamias_graeca)),Scaphiophryne_nigropalmatus),Aplopeltura_squaterola),Grampus_sinensis),(((Acanthogonatus_brandtii,Eudrornias_mackloti),(((Amphiuma_viridescens,Eryx_tigrinus),Tringa_argali),Prunella_pachypus)),Athene_cliffordii)),(Lepus_pygargus,Lobipes_maldivarum)),(Cynops_gibbosus,((Liasis_aristotelis,Tadorna_leucogaster),(Pyxicephalus_argentatus,Sus_karelini)))),Liasis_undulata)),((((((((((((((((((((((((Accipiter_scripta,Erpeton_albopillosum),Pachydactylus_ferox),Squaterola_leucoptera),(Alcedo_classicus,((Cervus_enhydris,Middendorffinaia_griseus),Neophron_adspersus))),Lasiodora_bengkuluensis),(Cardiocranius_sieboldii,Pterinochilus_floridana)),(((((((Acipenser_vegans,Sturnus_ferina),Aix_helvetica),((Gambelia_cristatellus,(Leptopelis_ichthyaetus,Oceanodroma_rudicolis)),Theloderma_boyciana)),Scaphiopus_cherrug),(Bradypterus_reticulatus,Fregilegus_tenuirostris)),((((((((Almo_collaris,Natriciteres_corticale),((Arenaria_doctus,crecca_purpurascens),Balaena_maritimus)),((((((Argynnis_vipio,Osteopilus_novaeguineae),Synthliboramphus_diffidens),(Citharacanthus_melanoleucus,(Pyxicephalus_nivalis,Uroplatus_ussuriensis))),Synthliboramphus_colombianus),Rhacophorus_himalayensis),((Eudramias_dominicus,(Geochelone_pendulinus,Ophisops_smithii)),Picus_cyanochloris))),Bombina_australis),((Cottus_albertisii,Phrynosoma_cancerides),Oligodon_barbata)),(((((Bubulcus_scabra,Moschus_sphenocercus),Netta_spaldingi),(Otis_nebrius,Pterocles_erythronotus)),Monachus_krueperi),Scaphiophryne_quadriocellata)),Kinixys_vegans),Ardea_deserti)),Lutra_fiber)),Ptychozoon_ameiva),Vulpes_pulchra),((((Ambystoma_exquisita,(Ambystoma_leucomystax,(Chrysopelea_radiata,Tamias_prasina))),Hadogenes_fallax),Ortigometra_aceras),(((Basiliscus_fluviatilis,Middendorffinaia_monorhis),(Hottentotta_climacophora,Pachydactylus_nelsonii)),Melanocorypha_azureus))),(((((((Aegialifes_squamatus,Salvelinus_spaldingi),Eudramias_isabellina),Ethmostigmus_jaculus),((Bubulcus_variabilis,Dafila_parreyssi),Kinosternon_fuliginosus)),((Balaena_colchicus,Enhudra_ocellatus),(Basiliscus_rutilans,Xenophrys_crucigera))),((((((((Alcedo_coelestinus,Chlamydosaurus_leiosoma),Squaterola_dione),Mesoplodon_isabellina),Phelsuma_epops),Pusa_piscator),Alectoris_monacha),Buthacus_fuliginosus),(Brachyramphus_ochropus,Sericinus_angulifer))),Falcipennis_cavirostris)),(Megophrys_jubata,Tursiops_boulengeri)),Oenanthe_graeca),Nemachilus_laevis),((((Ahaetulla_leucoryphus,(Gekko_floridana,Turdus_schneideri)),Anthropoides_weberi),Phelsuma_ignicapillus),Salmo_rupestris)),Tringa_nigra),Eubalaena_schrencki),Furcifer_glutinosus),Bubulcus_canagica),(Heterodon_laevis,((Ortigometra_armata,Otocoris_rubicola),Uroplatus_perdix))),((Bombina_marmoratus,Parnassius_sujfunensis),Phrynocephalus_dennysii)),Netta_australis),Ninox_hypoleucus),Homopholis_hyemalis)),Agama_melanoleucus),(Allactaga_mitratus,((((((((Aphonopelma_rudicolis,(Otocoris_middendorffi,Sterna_gebleri)),(Charadrius_vermiculatus,((Chen_virgo,Cinclus_montela),Liasis_caudatus))),(Colaeus_exanthematicus,(Tadarida_aureostriata,Triturus_tentaculatum))),Grammostola_serpentina),Salvelinus_avinivi),Polypedates_cygnus),Ptyodactylus_temminckii),Pseudorca_rudicolis))),((((((((Alpes_gobio,((((Chlidonias_atrigularis,Pelusios_medirostris),Hemitheconyx_undulata),Pica_breitensteini),(Eirenis_clypeata,Odobenus_nyroca))),(Aplopeltura_pallidus,(Phyllopneuste_hungaricus,Pituophis_rufodorsata))),(Hyla_longicollis,Synthliboramphus_Bernicla)),Psammophis_quinquestriatus),((Gekko_paradoxus,Riparia_chamaeleontinus),Haliaetus_leporosum)),Oenanthe_cepediana),crecca_colombianus),Anthropoidae_cinclus)),(Phrynocephalus_meles,Sphenops_leucogeranus)),Eremophila_undulata),Nyctixalus_taeniura),Ortigometra_vastus),(((Aegialites_merganser,(Budytes_helvetica,Hirundo_daurica)),((((Grampus_nyroca,Dyscophus_zagrosensis),((((((Acanthogonatus_lesueurii,Pyrrhocorax_grossmani),Corytophanes_erythronotus),(Eschrichtius_thibetanus,Pseudemys_monoceros)),(Chettussia_eulophotes,Enhudra_erythropus)),(Bombus_rupestris,Procellaria_molurus)),(Alaus_smaragdina,Marmota_soloensis))),(Dipus_taxus,(((Coleonyx_ruthveni,Sphenurus_rufina),Rhesus_adamsii),((((((((((((((((((((((((((((Acanthogonatus_adamsii,((Apodora_scripta,((Corallus_porphyrio,Saxicola_leucocephala),(Gyps_emarginatus,(Lepus_vitulina,Ptyodactylus_marinus)))),(Salvelinus_nasuta,Scaphiopus_laticauda))),(Grus_interpres,Rhabdophis_trigonopodus)),((Clemmys_subglobosa,(Coenobita_boa,Erpeton_ion)),Motacilla_sibiricus)),Damon_breitensteini),((Arctomys_perrotetii,(Atrophaneura_caudata,Coregonus_merganser)),Neophron_peregusna)),(Anas_leucogaster,Eublepharis_fuscatus)),(((Avicularia_pugnax,(Cyriopagopus_versicolor,Varanus_subniger)),(Boiga_middendorffi,Phelsuma_brachydactyla)),Lyrurus_unicus)),((Canis_collybitus,Pelusios_caryocatactes),Pachydactylus_caryocatactes)),Spalerosophis_bairdii),Nipponia_maculatum),Vormela_fimbriatus),((((((((Alaus_bukhunensis,(Circaetus_geniculata,Morelia_sieboldii)),Petrocincla_intermedia),(Hemiscorpius_australis,(Ketupa_saxatilis,Rhacophorus_lineatus))),Teratolepis_rudicolis),Egretta_rupestris),((((((Androctonus_uluguruensis,Kassina_albertisii),Eunectes_scrofa),Ketupa_chrysargos),(Citellus_garullus,(Laudakia_perdix,(Numenius_martensi,(Tadarida_adspersus,Tadarida_cyanogenys))))),(Ctenotus_manul,(Net_albatrus,Python_cinclus))),Clemmys_homeana)),(Clemmys_querquedula,(Parnassius_armeniacus,Upupa_parahybana))),(((Cinclus_fallax,Oenanthe_fasciolata),Ctenosaura_chukar),Phelsuma_longicollis))),(((Apodora_erythrogastra,(Notophthalmus_bairdi,(Rangifer_chrysaetus,Syrrhaptes_gigas))),((Cardiocranius_galeatus,Petrocincla_timidus),Querquedula_lutra)),Cyclemys_pusilla)),(((Acanthoscurria_holbrooki,(((((Accipiter_erythropus,((Agama_caeruleus,Bos_nebrius),Hemiscorpius_gregaria)),Limnaeus_erythronota),((Almo_madagascariensis,Felis_capra),Vulpanser_duplus)),(Phalacrocorax_ibera,Pseudorca_deremensis)),Pterinochilus_musicus)),(Almo_albicilla,((Anthropoidae_pulchripes,Leptobrachium_rufina),((Hydrochelidon_veredus,Picus_sujfunensis),Nerodia_rufodorsata)))),(Netta_kingii,Theloderma_scripta))),Odonthurus_australis),((Bombus_agama,Kassina_aeruginosus),(Erpeton_percnopterus,Phormictopus_virgo))),Falcipennis_septentrionalis),(Amphiuma_mlokosiewiczi,Chamaeleo_completus)),Felis_rostratus),(Carabus_japonica,Equus_lavaretus)),(Chlamydotis_taczanowskius,Thymallus_maculatum)),Lycodon_iguana),Platalea_brevipes),(((((((Balaena_imperator,Gavia_teniotis),Cyriopagopus_duplex),Pareas_vittatus),Phyllopneuste_bairdi),Chlamydosaurus_bairdi),Zosterops_triangulum),(Moschus_unicus,Telescopus_prasina))),Petrocincla_pygargus),Bradypterus_interiorata),(((Alpes_schneideri,((Boa_bairdi,Glareola_oenanthe),((Chamaeleo_boa,Saga_moschiferus),(Mergus_marmorata,Micropalama_hypomelus)))),Nemachilus_salei),Streptopelia_arcticus)),Anas_mystaceus)))),((Pogona_caudolineatus,((Ctenosaura_bengkuluensis,Notophthalmus_gobio),((Acanthosaura_rudicolis,(((((((((((((((Aix_constricticollis,Liasis_iankowskii),Asthenodipsas_meermani),(((((((((Antilope_caesius,(Porphyrio_leiosoma,Selenocosmia_vegans)),(Hottentotta_coelestis,Salamandra_caucasicus)),Oceanodroma_sauritus),Lepus_salvator),((Chelodina_scabra,Rhamphiophis_metallica),((Chlamydosaurus_jaculus,Hemiscorpius_multituberculatus),Thecla_floridana))),Eudrornias_saiga),Aythia_scalaris),Phrynomerus_ladogensis),(Crotaphytus_clinatus,Neolycaena_albocinctus))),(Amphiuma_pulchripes,(((Haliaetus_angulifer,Scolopax_vitticeps),Phoca_cenchria),Odobenus_nigrolineatus))),Panthera_chrysaetos),(Cuculus_aeruginosus,Gekko_prominanus)),Aythya_iguana),Kaloula_maculatum),Remiz_savignii),Sternotherus_doriae),(((Falco_pugnax,Lamprolepis_savignii),(Fuligula_cristatellus,Saiga_perrotetii)),Grus_mystaceus)),((Parus_aceras,Salmo_lasiopterus),Pelodytes_pardus)),Rhacodactylus_celer),Tringa_cyanea),Dendrelaphis_getula)),(Lanius_ovata,(Oxyura_cyanea,Phrynocephalus_uluguruensis))))),((Dyscophus_venulosa,(Macrorhamphus_macularius,Mergus_docilis)),(Tursiops_ornata,(Psammophis_lividum,((Oxyura_smaragdina,Milvus_eburnea),(Tryngites_subminiatus,Aegypius_hirundo)))))))),(((((((Bradyporus_sieboldii,(Eutamias_bifasciatus,(((Scorpio_oxycephalum,(Hyla_aristotelis,Lagenorhynchus_barbata)),(Camptoloma_equestris,((Xenopeltis_perdix,Uroplatus_wumuzusume),Pareas_gregarius))),(Sphenops_eximia,Eulabeia_guentheri)))),Laudakia_standingii),((Turdus_tinnunculus,(Mergus_schreibersi,Pleurodeles_taeniura)),(Phrynomerus_amboinensis,Lutra_orientalis))),((Phrynocephalus_scripta,((Coturnix_vulpes,Brachypelma_ignicapillus),Epipedobates_alpina)),(Lanius_sanguinolentus,Fuligula_botnica))),(((Eutamias_hypoleucos,Megaloperdix_fragrans),Coleonyx_vulpes),((Cypselus_rosmarus,Lamprophis_mongolica),(Haliaeetus_ladogensis,Hirundo_gecko)))),(((Lasiodora_aestivus,((Seokia_livia,Sphenops_aceras),Casarca_ruthveni)),((Acanthis_bellii,Butastur_glacialis),(Porphyrio_grossmani,Buthacus_variabilis))),((Eryx_bicinctores,Phrynops_communis),(Vormela_cranwelli,((Basiliscus_coturnix,Marmota_taezanowskyi),Monodon_caudatus))))),((Hyperoodon_atriceps,Mabuya_marinus),((((Mergus_leucopsis,Mareca_novaeangliae),Paraphysa_mirabilis),(Pleurodeles_troglodytes,(((Ursus_scripta,(Accipiter_laticauda,Gonyosoma_lesueurii)),((Moschus_zenobia,Nyctixalus_flavigularis),(Rhynchaspis_atra,Ptychozoon_chuatsi))),Pelusios_mlokosiewiczi))),Spalerosophis_holbrooki))))));' + + +n=Newick_Tree(s1) +m=Newick_Tree(s2) +cmp_max={} +cmp_min={} +cmp_len={} +mrev=dict(zip(m.labels.values(),m.labels.keys())) +#nrev=dict(zip(n.labels.values(),n.labels.keys())) +def m_index_to_n_postorder_index(x): + return n.postorder_index[n.labels[mrev[x]]] + +def candidates(n,m,mbase): + if len(m.dtree[mbase])==0: + cmp_min[mbase]=m_index_to_n_postorder_index(mbase) + cmp_max[mbase]=m_index_to_n_postorder_index(mbase) + cmp_len[mbase]=1 + # self.width[base]=self.max[base]-self.min[base] + return + else: + for x in m.dtree[mbase]: + candidates(n,m,x) + cmp_min[mbase]=min([cmp_min[x] for x in m.dtree[mbase]]) + cmp_max[mbase]=max([cmp_max[x] for x in m.dtree[mbase]]) + cmp_len[mbase]=sum([cmp_len[x] for x in m.dtree[mbase]]) + # self.width[base]=self.max[base]-self.min[base] + return + +candidates(n,m,m.root) +msplits_in_n_coords=[(cmp_min[x],cmp_max[x]) for x in cmp_min.keys() if cmp_max[x]-cmp_min[x]+1==cmp_len[x] and cmp_len[x]>1 and cmp_len[x]0 and n.max[x]-n.min[x]DP[i] and nums[i]>nums[j]: + DP[i]+=1 + prev[i]=j + if DP[i]>DPsave: + isave=i + DPsave=DP[i] + seq=[] + j=isave + while prev[j]!=-1: + seq.insert(0,nums[j]) + j=prev[j] + seq.insert(0,nums[j]) + return(np.array(seq)) + +ans=lis(nums) +for x in ans: + print x, +print +rnums=-nums +ans=-lis(rnums) +for x in ans: + print x, +print diff --git a/substring.py b/substring.py new file mode 100644 index 0000000..3756f37 --- /dev/null +++ b/substring.py @@ -0,0 +1,55 @@ +#/usr/bin/python + +import sys + +# quadratic time (inefficient) common substring algorithm + + + +def lcs(s1,s2): + max=0 + ans={} + ret=[] + for i in range(len(s1)): + ans[i]={} + for j in range(len(s2)): + if s1[i]==s2[j]: + if i==0 or j==0: + ans[i][j]=1 + else: + ans[i][j]=ans[i-1][j-1]+1 + if ans[i][j]>max: + max=ans[i][j] + ret=[[i-max+1,j-max+1,max]] + elif ans[i][j]==max: + ret.append([i-max+1,j-max+1,max]) + else: + ans[i][j]=0 + return(ret) + + + + +try: + f=open(sys.argv[1],'rU') +except: + f=sys.stdin + +value,key,s="","",{} + +for x in f: + if x[0]!=">": + value=value+x.strip() + else: + if key!="": s[key]=value + value='' + key=x[1:].strip() +s[key]=value + + +first_key,first_value=s.popitem() +for x in s: + a=lcs(first_value,s[x]) + first_value=a + +print first_value diff --git a/suff.py b/suff.py new file mode 100644 index 0000000..3afb2c2 --- /dev/null +++ b/suff.py @@ -0,0 +1,47 @@ +from collections import defaultdict +from sys import setrecursionlimit +setrecursionlimit(1500) +trie=defaultdict(list) +labels={} +Node=0 +Next=1 +data=[] +with open("rosalind_suff.txt","rU") as f: + line=f.readline().strip() + +for i in range(len(line)): + data.append(line[i:]) + +for x in data: + Node=0 + for y in x: + s=[labels[i] for i in trie[Node]] + if y in s: + Node=trie[Node][s.index(y)] + else: + trie[Node].append(Next) + labels[Next]=y + Node,Next=Next,Next+1 + + +f=open("suff_out.txt","w") + +def strings(trie,node,s): + #print node,s + if len(trie[node])>1: + f.write(s+labels[node]+'\n') + for n in trie[node]: + strings(trie,n,'') + return + if len(trie[node])==1: + strings(trie,trie[node][0],s+labels[node]) + return + if len(trie[node])==0: + f.write(s+'$\n') + return + + +for x in trie[0]: + strings(trie,x,'') + +f.close() \ No newline at end of file diff --git a/suffix.py b/suffix.py new file mode 100644 index 0000000..13098e3 --- /dev/null +++ b/suffix.py @@ -0,0 +1,212 @@ +#!/usr/bin/python + +class Node(object): + """A node in the suffix tree. + + suffix_node + the index of a node with a matching suffix, representing a suffix link. + -1 indicates this node has no suffix link. + """ + def __init__(self): + self.suffix_node = -1 + + def __repr__(self): + return "Node(suffix link: %d)"%self.suffix_node + +class Edge(object): + """An edge in the suffix tree. + + first_char_index + index of start of string part represented by this edge + + last_char_index + index of end of string part represented by this edge + + source_node_index + index of source node of edge + + dest_node_index + index of destination node of edge + """ + def __init__(self, first_char_index, last_char_index, source_node_index, dest_node_index): + self.first_char_index = first_char_index + self.last_char_index = last_char_index + self.source_node_index = source_node_index + self.dest_node_index = dest_node_index + + @property + def length(self): + return self.last_char_index - self.first_char_index + + def __repr__(self): + return 'Edge(%d, %d, %d, %d)'% (self.source_node_index, self.dest_node_index + ,self.first_char_index, self.last_char_index ) + + +class Suffix(object): + """Represents a suffix from first_char_index to last_char_index. + + source_node_index + index of node where this suffix starts + + first_char_index + index of start of suffix in string + + last_char_index + index of end of suffix in string + """ + def __init__(self, source_node_index, first_char_index, last_char_index): + self.source_node_index = source_node_index + self.first_char_index = first_char_index + self.last_char_index = last_char_index + + @property + def length(self): + return self.last_char_index - self.first_char_index + + def explicit(self): + """A suffix is explicit if it ends on a node. first_char_index + is set greater than last_char_index to indicate this. + """ + return self.first_char_index > self.last_char_index + + def implicit(self): + return self.last_char_index >= self.first_char_index + + +class SuffixTree(object): + """A suffix tree for string matching. Uses Ukkonen's algorithm + for construction. + """ + def __init__(self, string, case_insensitive=False): + """ + string + the string for which to construct a suffix tree + """ + self.string = string + self.case_insensitive = case_insensitive + self.N = len(string) - 1 + self.nodes = [Node()] + self.edges = {} + self.active = Suffix(0, 0, -1) + if self.case_insensitive: + self.string = self.string.lower() + for i in range(len(string)): + self._add_prefix(i) + + def __repr__(self): + """ + Lists edges in the suffix tree + """ + curr_index = self.N + s = "\tStart \tEnd \tSuf \tFirst \tLast \tString\n" + values = self.edges.values() + values.sort(key=lambda x: x.source_node_index) + for edge in values: + if edge.source_node_index == -1: + continue + s += "\t%s \t%s \t%s \t%s \t%s \t"%(edge.source_node_index + ,edge.dest_node_index + ,self.nodes[edge.dest_node_index].suffix_node + ,edge.first_char_index + ,edge.last_char_index) + + + top = min(curr_index, edge.last_char_index) + s += self.string[edge.first_char_index:top+1] + "\n" + return s + + def _add_prefix(self, last_char_index): + """The core construction method. + """ + last_parent_node = -1 + while True: + parent_node = self.active.source_node_index + if self.active.explicit(): + if (self.active.source_node_index, self.string[last_char_index]) in self.edges: + # prefix is already in tree + break + else: + e = self.edges[self.active.source_node_index, self.string[self.active.first_char_index]] + if self.string[e.first_char_index + self.active.length + 1] == self.string[last_char_index]: + # prefix is already in tree + break + parent_node = self._split_edge(e, self.active) + + + self.nodes.append(Node()) + e = Edge(last_char_index, self.N, parent_node, len(self.nodes) - 1) + self._insert_edge(e) + + if last_parent_node > 0: + self.nodes[last_parent_node].suffix_node = parent_node + last_parent_node = parent_node + + if self.active.source_node_index == 0: + self.active.first_char_index += 1 + else: + self.active.source_node_index = self.nodes[self.active.source_node_index].suffix_node + self._canonize_suffix(self.active) + if last_parent_node > 0: + self.nodes[last_parent_node].suffix_node = parent_node + self.active.last_char_index += 1 + self._canonize_suffix(self.active) + + def _insert_edge(self, edge): + self.edges[(edge.source_node_index, self.string[edge.first_char_index])] = edge + + def _remove_edge(self, edge): + self.edges.pop((edge.source_node_index, self.string[edge.first_char_index])) + + def _split_edge(self, edge, suffix): + self.nodes.append(Node()) + e = Edge(edge.first_char_index, edge.first_char_index + suffix.length, suffix.source_node_index, len(self.nodes) - 1) + self._remove_edge(edge) + self._insert_edge(e) + self.nodes[e.dest_node_index].suffix_node = suffix.source_node_index ### need to add node for each edge + edge.first_char_index += suffix.length + 1 + edge.source_node_index = e.dest_node_index + self._insert_edge(edge) + return e.dest_node_index + + def _canonize_suffix(self, suffix): + """This canonizes the suffix, walking along its suffix string until it + is explicit or there are no more matched nodes. + """ + if not suffix.explicit(): + e = self.edges[suffix.source_node_index, self.string[suffix.first_char_index]] + #print "canonizing", suffix.source_node_index,suffix.first_char_index, e + if e.length <= suffix.length: + suffix.first_char_index += e.length + 1 + suffix.source_node_index = e.dest_node_index + self._canonize_suffix(suffix) + + + # Public methods + def find_substring(self, substring): + """Returns the index of substring in string or -1 if it + is not found. + """ + if not substring: + return -1 + if self.case_insensitive: + substring = substring.lower() + curr_node = 0 + i = 0 + while i < len(substring): + edge = self.edges.get((curr_node, substring[i])) + if not edge: + return -1 + ln = min(edge.length + 1, len(substring) - i) + if substring[i:i + ln] != self.string[edge.first_char_index:edge.first_char_index + ln]: + return -1 + i += edge.length + 1 + curr_node = edge.dest_node_index + return edge.first_char_index - len(substring) + ln + + def has_substring(self, substring): + return self.find_substring(substring) != -1 + + + + diff --git a/superstring.py b/superstring.py new file mode 100644 index 0000000..b4231ba --- /dev/null +++ b/superstring.py @@ -0,0 +1,36 @@ +#!/usr/bin/python + +from collections import OrderedDict + +value,key="","" +s=OrderedDict({}) + +with open("rosalind_long.txt","rU") as f: + for x in f: + if x[0]!=">": + value=value+x.strip() + else: + if key!="": s[key]=value + key=x[1:].strip() + value="" + s[key]=value + +strs=s.values() +while len(strs)>1: + h=strs.pop() + print len(h) + k=h[0:400] + for i,x in enumerate(strs): + j=x.find(k) + if j>=0: + if len(h)+j>len(x): + strs[i]=x[0:j]+h + strs.insert(0,strs.pop(i)) + break + else: + strs.insert(0,h) + +print strs[0] + + + diff --git a/test.py b/test.py new file mode 100644 index 0000000..9788e49 --- /dev/null +++ b/test.py @@ -0,0 +1,23 @@ +import numpy as np + +import cython_align +from blosum62 import * +from numpy import argmin +from fasta import readFASTA + +# this is an implementation of the needleman-wunsch algorithm +# and it should handle the affine gap situation + + +def mismatch_penalty(A,B): + if A!=B: + return -blosum62[A+B] + else: + return -blosum62[A+B] + +s=readFASTA("rosalind_laff.txt") +A=s.values()[0] +B=s.values()[1] +print A,B +score=cython_align.build_dp_array(A,B,10,1,mismatch_penalty) +print score diff --git a/tmp.py b/tmp.py new file mode 100644 index 0000000..7d12152 --- /dev/null +++ b/tmp.py @@ -0,0 +1 @@ +s3='(((Acanthosaura_stellatum,((Calidris_stagnalis,Cynops_taezanowskyi),Chlamydosaurus_leiosoma)),(((((((((Ahaetulla_karelini,(((((Ameiva_opimus,(Theloderma_gallinago,Vanellus_carnifex)),Psalmopoeus_solitaria),(Chen_brevipes,(Nipponia_bonasus,Ovis_enhydris))),Philacte_casualis),Phrynomerus_mackloti)),Sericinus_aestivus),(Eutamias_boschas,(((((Falco_pelagicus,Rhacophorus_brandtii),(Gekko_himantopus,((Phalacrocorax_aleutica,Rangifer_pugnax),Sterna_dignus))),Lamprophis_sauromates),Pelusios_eulophotes),Pelodiscus_grandis))),((Alcedo_virgo,(((Chen_lasiopterus,Passer_jaspidea),Rosalia_porphyrio),Pandinus_paganus)),Motacilla_calamita)),Buthus_leucophyllata),(Cygnopsis_Bernicla,Liasis_coelestinus)),Candoia_collectivus),Oceanodroma_pyromelana),((((((((((Alopex_latiscutatus,Porzana_leucoryphus),Euspiza_kingii),Falcipennis_tricolor),(Telescopus_pachypus,(Tupinambus_carinatus,Vulpanser_jubata))),((Boa_vulpes,Pituophis_clypeatus),Cynops_rupestris)),((Egretta_latiscutatus,(Phrynops_barbatus,Theloderma_plathyrhychos)),Kinixys_pyromelana)),Chelodina_oedicnemus),Capella_acutus),Leptobrachium_guangxiensis),Certhia_labiatus))),(((((((((((((Accipiter_holbrooki,(Balaenoptera_triangulum,Limnodromus_marinus)),Buteo_mirabilis),((Brachyramphus_albatrus,(Chrysemys_armata,Phasianus_corone)),Chelus_subcinctus)),((Ahaetulla_sibirica,Buthacus_paradisi),(Corallus_tinnunculus,(Macrorhamphus_carnifex,Psammophis_middendorffi)))),(Chamaeleo_sinensis,Rhesus_prominanus)),Lutra_leucoptera),(Leiurus_hodgsoni,Nemorhaedus_monedula)),((Alcedo_ignicapillus,((Ameiva_cygnus,Hyla_corone),(((Candoia_multituberculatus,Pleurodeles_penelope),(Castor_taxispilota,(Eucratoscelus_armeniacus,Pituophis_reticulatus))),Leptobrachium_godlewskii))),Nyctixalus_torquata)),((((((((Acheron_dexter,Felis_chinensis),Bombycilla_regius),((((((Almo_dominicus,((Aythia_monachus,Madagascarophis_plumipes),((Haliaeetus_pictus,Mylopharyngodon_fischeri),Paraphysa_dignus))),(((((((Alpes_cocincinus,Lamprophis_communis),Leiurus_rubida),(Eryx_rutilans,Pyrgilauda_rudicolis)),Lagenorhynchus_avosetta),Lobipes_longicollis),(Bos_politus,Corvus_auriculatus)),Sceloporus_chinensis)),(Caiman_lesueurii,Pseudorca_ceterus)),Callipogon_scincoides),(Bronchocela_pholeter,Chettussia_minutus)),Cuora_aureola)),(Eublepharis_pallasii,Osteopilus_dispar)),((Gyps_canorus,Limnaeus_picta),Hottentotta_hendersoni)),(Babycurus_aegyptia,Bombycilla_plathyrhychos)),(((((Ahaetulla_indicus,(((((Chelus_epops,Middendorffinaia_ibera),Ptyodactylus_longicollis),(Cuora_flammea,Porphyrio_monilis)),(Dafila_coelestis,Sterna_geyri)),Uncia_carnifex)),(((Almo_sibiricus,(((Androctonus_ridibundus,Geochelone_bengalensis),(Archispirostreptus_albertisii,Neophron_erythropus)),(Parus_margaritifera,Scolopax_personata))),Pelomedusa_alpinus),Oxyura_belliana)),Bradyporus_communis),Xenophrys_mnemosyne),((Hadrurus_campestris,Net_carbonaria),((((Ketupa_melleri,Salvelinus_hipposideros),Rhynchophis_avosetta),Parus_paradisi),Ninox_breitensteini)))),(Candoia_kraepelini,Coleonyx_grupus))),((((Callipogon_plumifrons,(Felis_marinus,((Otis_orientalis,Ptychozoon_personata),Querquedula_wislizeni))),Upupa_quadriocellata),Lystrophis_atra),Diomedea_galeatus)),Avicularia_boulengeri),((Brachypelma_sieboldii,Elseya_macrops),Bubulcus_subcinctus)),Pareas_caryocatactes),(((((((Accipiter_onocrotalus,(Elaphe_parahybana,Xenochrophis_flava)),(((Buteo_manul,Hydrosaurus_aureola),Hydrosaurus_epops),Hydrosaurus_paradisi)),Phyllopneuste_means),(Desnana_subcinctus,((Eublepharis_armata,(Panthera_clericalis,Thamnophis_saxatilis)),Siniperca_shadini))),(Geochelone_chukar,Plethodon_garmani)),(Dyscophus_stimsoni,Lagenorhynchus_glutinosus)),(Chamaeleo_strepera,(Chen_capreolus,Nipponia_avocetta))));' diff --git a/tpose.py b/tpose.py new file mode 100644 index 0000000..398cf81 --- /dev/null +++ b/tpose.py @@ -0,0 +1,9 @@ +import sys +data=sys.stdin.readlines() +nstrs= len(data) +lstrs= len(data[0].strip()) +for i in range(lstrs): + for j in range(nstrs): + sys.stdout.write(data[j][i]) + sys.stdout.write('\n') + diff --git a/tree2.py b/tree2.py new file mode 100644 index 0000000..3043955 --- /dev/null +++ b/tree2.py @@ -0,0 +1,20 @@ +import sys +from dendropy import * +from dendropy.interop import paup + +f=open('angio35.nex','r') +d=DataSet() +d.read(f,"nexus") +for x in d.char_matrices: + tree=paup.estimate_tree(x,tree_est_criterion='likelihood',num_states=2,unequal_base_freqs=True,gamma_rates=False,prop_invar=False) + print tree.as_string("newick")`! + + + + + + + + + + diff --git a/tree_compare.py b/tree_compare.py new file mode 100644 index 0000000..dcc15b3 --- /dev/null +++ b/tree_compare.py @@ -0,0 +1,46 @@ +#computes the "RF" distance between trees s1 and s2 in Newick Format + +from nwck_class_3 import Newick_Tree +#s2='(rat,(dog,cat),(rabbit,(elephant,mouse)));' +#s1='(rat,(cat,dog),(elephant,(mouse,rabbit)));' +#s1='((a,(b,c)),d,e)' + + +s1='(((((((((((Abantias_mirabilis,(Chlidonias_emilia,Iguana_yeltoniensis)),Podoces_hemilasius),(Ameiva_erythronotus,Chelus_lepturus)),Sericinus_guangxiensis),(((((((((Acanthosaura_oenanthe,(((Capella_melonotis,Meles_angustirostris),Ingerophrynus_fernandi),Chlamydotis_euptilura)),Remiz_montela),(((((((Ameiva_pica,(((((Cygnus_chukar,Rhynchaspis_insignis),Erpeton_alterna),Lasiodora_minor),Trapelus_glacialis),Hyla_jaculus)),((((Dipsosaurus_gregaria,((Hottentotta_homeana,Scaphiopus_mystaceus),(Procellaria_platycephala,Underwoodisaurus_stellatum))),Ptyodactylus_cyanochloris),((Hydrochelidon_Jankowskii,Tadorna_monilis),Meles_pardalis)),Micropalama_deminutus)),(Recurvirostra_mitratus,sibiricus_cliffordii)),(Erpeton_sp,Salvelinus_spinifera)),(((Chamaeleo_colubrinus,(Chrysemys_fernandi,Norops_alpinus)),Hyla_aureola),Ketupa_cyanea)),Asthenodipsas_kurilensis),(Hadrurus_trianguligerus,crecca_acanthinura))),((Eryx_sauromates,((Pogona_tricolor,Rosalia_veredus),Turdus_lividum)),Haliaeetus_hyperboreus)),(Bombyx_bairdii,Physignathus_fragrans)),Philothamnus_bairdi),((Anthropoidae_carnivorus,Phalacrocorax_longipennis),((Calidris_eulophotes,(Gekko_hypomelus,Pagophila_personata)),((Circus_pallasii,(Psalmopoeus_veredus,Turdus_bicoloratum)),Nemachilus_breitensteini)))),((Chrysopelea_rosmarus,(Erpeton_calamita,Spalax_corsac)),Pyrrhocorax_siebenrocki)),Pseudemys_pygmaeus)),(Aix_prasina,((((((((((Aix_pugatshuki,Lepidobatrachus_plumifrons),(Dendrelaphis_climacophora,Saxicola_caesius)),(Chalcides_cyanochloris,((Cynops_grus,((Neolycaena_virgo,Thamnophis_diadema),(Python_haliaetus,Tryngites_boschas))),Phelsuma_helena))),Plegadis_sanguinolentus),(Argynnis_equestris,(Coenobita_pulchra,((((Lamprophis_teniotis,Pelodytes_solitaria),(Laudakia_parahybana,Limnodromus_glottis)),(((Pelusios_interpres,(Sus_cyanea,sibiricus_multifasciata)),Rhamphiophis_means),Telescopus_alpinus)),Net_major)))),Lampropeltis_leucoptera),((Alpes_ibis,Lystrophis_murinus),Apalone_heudei)),((Arctomys_coloratovillosum,Salvelinus_fasciata),(Caiman_fulvus,(Chondropython_calligaster,Gyps_pusilla)))),Pandinus_meermani),Tursiops_lopatini))),Passer_gregarius),((Candoia_sujfunensis,Vulpes_fusca),((Fregilegus_cynodon,Otis_grossmani),(Notophthalmus_krueperi,Petrocincla_keyzerlingii)))),Megophrys_cancerides),Carabus_manul),(((((((((((((((((((((((((Abantias_situla,Middendorffinaia_rufinus),(((Acanthis_major,(Selenocosmia_completus,Syrrhaptes_kopsteini)),Seokia_savignii),Bradyporus_miliaris)),(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Acanthis_acanthinura,Balaenoptera_unicus),Paraphysa_canagica),Eumeces_aegyptia),Balaenoptera_nigra),Phasianus_orientalis),(Amphiuma_communis,Teratolepis_nasuta)),(Bombycilla_citreola,Rhesus_gigas)),(Chettussia_medici,Rhacophorus_erythropus)),Butastur_helena),Paramesotriton_pugatshuki),Philacte_dominicus),(Elaphe_lineatus,Salamandra_dentata)),Sturnus_shadini),(((((((Acanthoscurria_graculus,Sorex_scincoides),Rhamphiophis_variabilis),Falco_gallinago),(Enhydris_caucasicus,(Iomachus_arseniavi,Porzana_graeca))),Chondropython_lutris),Accipiter_borealis),((Aegialifes_pictus,Podoces_botnica),(((((Archispirostreptus_javanica,Squaterola_pulchripes),Scolopendra_teguixin),Mergus_purpurascens),Tetraogallus_Bernicla),Natriciteres_clarus)))),(Antaresia_argentatus,(((((((((Cygnopsis_gecko,(Natriciteres_vulpes,Pelodiscus_pardus)),(Falcipennis_teguixin,Fulica_dentatus)),Gonyosoma_geniculata),Sphenops_rudicolis),Rhynchaspis_turneri),Dipsosaurus_uluguruensis),Tropidurus_striatus),Megaptera_tigrinus),Sorex_brongersmai))),((Chlamydosaurus_odoratus,Eulabeia_occitanus),Ctenosaura_rufus)),(((((((((((((((((((((((((((((((((((((((((((((((Acanthis_boa,((((Callipogon_tigris,Haplopelma_hassanica),Tetrao_carbonaria),Eirenis_filipjevi),Oenanthe_subcinctus)),(((((((((Acanthoscurria_hipposideros,((((((((((((((((((((((((((((((((((((((((((((((Accipiter_elegans,((((((((Dipsosaurus_politus,Hadogenes_cianeus),Mochlus_elegans),Minipterus_leucogeranus),Monodon_fulvus),Lepus_exanthematicus),Fulica_insignis),Marmota_avinivi),Gekko_triangulum)),Cypselus_comicus),Acheron_mandarina),(Ambystoma_glutinosus,(Leptobrachium_bukhunensis,Lepus_dignus))),(Avicularia_leucomystax,Eryx_ferina)),(Chondropython_stellio,(Haliaeetus_rudicolis,Iomachus_perdix))),Philothamnus_jaculus),Halichoerus_hipposideros),Lycaenopsis_grossmani),Phrynocephalus_chuatsi),((Ctenotus_tataricus,Phalacrocorax_niloticus),Tadarida_barbata)),Pandinus_rubicola),Tetrao_dendrophila),(((((((Aphonopelma_compactus,Iguana_flavolineata),Gongylophis_taezanowskyi),(Eremophila_cyanogenys,Petrocincla_javanica)),(Balaena_tarda,Xenochrophis_clericalis)),(((((((Callipogon_zenobia,(Ethmostigmus_maihensis,Milvus_dominus)),(Melanocorypha_vastus,Ptychozoon_cambridgei)),(Ctenotus_yeltoniensis,Dendrelaphis_vipio)),Chamaeleo_albertisii),Phrynocephalus_felderi),Oligodon_melanoleucus),Ophisops_heterolepidotus)),Cyriopagopus_nupta),Burhinus_uluguruensis)),Corallus_hodgsoni),(Allactaga_mexicana,Desnana_schokari)),(((Canis_siebenrocki,Strepsilas_rostratus),(Ceratophrys_kazanakowi,Saxicola_cynodon)),Phoca_taxus)),(((((((((Aix_ammon,Platemys_molurus),(Circaetus_venulosa,Teratolepis_monachus)),Psammophis_pulchripes),Glareola_hilarii),Laudakia_albocinctus),Epicrates_weliczkowskii),Rhynchophis_atthis),(Asthenodipsas_battersbyi,Corvus_clypeata)),(((Anas_japonica,((((Calidris_microlepis,(Liasis_comicus,Netta_iankowskii)),(((Chettussia_weberi,Lasiodora_meles),Xenopeltis_regius),Limnodromus_calidris)),(Pyxicephalus_ocellatus,Trachemys_vegans)),Cottus_quadriocellata)),Zosterops_giganteus),Hadrurus_vulpes))),Dendrelaphis_cinereus),Phylloscopus_stagnalis),(((((((Aphonopelma_aspera,Mogera_corsac),((Bombyx_ridibundus,Candoia_zenobia),(Cyriopagopus_rusticolus,Micropalama_naumanni))),Spermophilus_fragrans),(Phrynosoma_australis,Syrrhaptes_monoceros)),(Onychodactylus_maculata,(Pandion_odoratus,Trionyx_graculus))),Fuligula_apus),((Bos_castus,(Chalcides_exquisita,Salmo_albicilla)),(Buthacus_vastus,((Camptoloma_personata,((Chrttusia_maihensis,Pyrgilauda_pica),Corallus_argentatus)),Nemachilus_asperum))))),(Alauda_wislizeni,Mylopharyngodon_paradisi)),(((((((Arctomys_rubida,Chamaeleo_microlepis),Tadarida_dispar),Balaenoptera_leucomelas),(Holaspis_griseus,Parus_modestus)),Tadarida_sinensis),Cyclemys_glaucescens),((Halichoerus_altaica,Ketupa_ornata),(Laudakia_multifasciata,Upupa_auriculatus)))),(Almo_leucogaster,Anolis_emarginatus)),(Telescopus_dexter,Vipera_subcinctus)),Tadorna_albirostris),Tiliqua_vastus),((Alauda_lutra,Elaphe_guangxiensis),((Anthropoidae_arcticus,Columba_emilia),Thecla_pendulinus))),((((Bradypodion_dennysii,Butastur_monorhis),Elaphe_cristatus),Ziphius_auratus),Moschus_crispus)),((Anthropoidae_wumuzusume,Boiga_scripta),((((((Cervus_filipjevi,Rhacophorus_grus),Cynops_intermedia),((Dryobates_tatarica,Totanus_caudata),Tupinambus_middendorffi)),Erpeton_mutabilis),Rhamphiophis_porphyrio),Xenophrys_pallidus))),((((((((((((((((((((((((Acheron_mugodjaricus,((((Archispirostreptus_diadema,(Bombus_salei,Coregonus_cristatellus)),Lystrophis_opimus),Pelusios_himantopus),Hemitheconyx_eremita)),(Oedura_politus,Tylototriton_salamandra)),Elseya_melanuroides),Chamaeleo_climacophora),Zosterops_nelsonii),Corytophanes_leschenaultii),((((((((Almo_saiga,(Bombycilla_maurus,Cyriopagopus_edulis)),Buthus_xanthocheilus),(((((Brachypelma_sieboldii,Chondropython_soloensis),(((Chrttusia_zagrosensis,(Eudrornias_doctus,Nhandu_oenanthe)),Furcifer_verrucosus),Mabuya_pelagicus)),((((Cyclemys_mlokosiewiczi,Vanellus_bedriagai),(Limnodromus_tanganicus,Tamias_tinctorius)),Uroplatus_madagascariensis),(Rissa_oedicnemus,Sorex_heterolepidotus))),(Gypaetus_bonasus,Mogera_krueperi)),Limosa_subrufa)),Coenobita_guttifer),(Fuligula_jaspidea,Limnodromus_taczanowskius)),(Coleonyx_macularius,Sericinus_radiata)),Cyclemys_ceterus),Elaphe_ochropus)),((((((Ameiva_cornix,Zosterops_altaica),Ctenosaura_mexicanum),(((((Aphonopelma_moschata,Hottentotta_decor),(Kinixys_nasuta,Xenochrophis_irregularis)),Pusa_tetrix),Cyriopagopus_leuconotus),(Ciconia_bairdii,Epicrates_rufus))),Argynnis_serpentina),Motacilla_classicus),(Eumeces_vulgaris,Ninox_peregrinus))),Platalea_caelebs),Rufibrenta_botnica),(Enhudra_prasina,Nucifraga_pedo)),((Chrysopelea_rostratus,Synthliboramphus_madagascariensis),crecca_ochropus)),Hemiscorpius_fallax),(Lepidobatrachus_rusticolus,Mabuya_totanus)),Gyps_caudolineatus),Platalea_guttata),((Lasiodora_triangulum,Minipterus_uncia),Osteopilus_torquata)),(((((Alloporus_latiscutatus,Eschrichtius_schneideri),(Tetraogallus_lutra,Tiliqua_carbonaria)),Cottus_terrestris),(Fulica_fuellebornii,Homopholis_cingulata)),Ceratophrys_turtur)),((Corvus_purpurascens,((Megophrys_savignii,Strepsilas_noctua),Micropalama_graculus)),Odobenus_blakistoni)),Sus_anatina),((Ameiva_chinensis,Larus_cioides),Sturnus_eximia)),Upupa_avosetta),Synthliboramphus_hendricksoni),((((Eumeces_rufus,Syrrhaptes_ornata),Hysterocrates_squamatus),Plethodon_meermani),Gecarcinus_indica))),(Gekko_galeatus,Gerrhosaurus_melanostictus)),Bos_sanguinolentus),Streptopelia_chuatsi),(Allactaga_caryocatactes,Eucratoscelus_sauromates)),Sterna_acuta),Castor_fimbriatus),(Eudramias_haliaetus,Tylototriton_casualis)),((((((Antilope_floridana,Capreolus_griseus),Tupinambus_gregarius),Siniperca_fimbriatus),((Certhia_jacksoni,Scolopax_insignis),(Lycodon_fuellebornii,(Mabuya_lividum,Pelusios_nivalis)))),Capeila_Bernicla),((((((Boiga_flavomaculatus,Pleurodeles_rufodorsata),Phasianus_taxus),(((((Budytes_galactonotus,Paraphysa_murinus),Testudo_maldivarum),((Eudrornias_guineti,((Hirundo_schokari,Tetraogallus_geniculata),Mochlus_sagrei)),Lepus_atthis)),((((((Chelus_bifasciatus,(Cygnus_aceras,Pseudemys_dendrophila)),Crotaphytus_botnica),(Phrynohyas_mystacinus,Querquedula_moschiferus)),Underwoodisaurus_crucigera),(Chelydra_purpurascens,Ruticilla_collaris)),Chlidonias_arizonensis)),Lamprophis_tatarica)),Kassina_czerskii),(Hydrosaurus_chamaeleontinus,Turdus_laevis)),(Bombina_fissipes,Larus_zonata)))),(Chelus_wogura,Tryngites_fluviatilis)),Hydrosaurus_zonata),Cottus_vastus),(((((Aphonopelma_argentatus,Ephibolus_aegagrus),((Gonyosoma_vertebralis,(((Iomachus_pictus,Saxicola_albicilla),Spalax_brevirostris),Ursus_vipio)),Mustela_rhymnus)),Pyxicephalus_albirostris),(Homopholis_eximia,Philacte_vulpes)),Melanocorypha_giganteus)),((((Alpes_maihensis,(Aythya_montela,Kinixys_similis)),(Chlidonias_rutilans,Phrynocephalus_subrufa)),(Eirenis_smithii,Ophisops_guttifer)),Pituophis_deminutus)),Pyrgilauda_hemilasius),Eucratoscelus_musicus)),Rhombomys_squaterola),(Acanthoscurria_trigonopodus,Hyla_deserti)),((Ardea_torquata,Thamnophis_sibiricus),(Capella_tolai,Heteroscodra_valliceps))),Rissa_bimaculata),Dendrelaphis_horridum),Scaphiophryne_nasicus),((((((((Citellus_rubida,crecca_hemilasius),(Gazella_dactylisonans,((Leiopython_livia,Paraphysa_fuliginosus),Tetrao_alcinous))),Squaterola_bengkuluensis),(Neolycaena_riparia,Pedostibes_infrafrenata)),Salamandra_korschun),(Limnodromus_milii,Motacilla_sepsoides)),(Corallus_aureola,Iguana_mlokosiewiczi)),Pyrgilauda_leucogeranus)),(Allactaga_medirostris,((Boiga_plathyrhychos,(Eudrornias_aegyptia,Ortigometra_ferina)),Kaloula_sujfunensis)))),Squaterola_unicolor),(Procellaria_atriceps,Python_melleri)),((((Aix_americanus,(Eudrornias_subcinctus,Hydrosaurus_breitensteini)),Tylototriton_diffidens),(Ephibolus_standingii,Odonthurus_sanguinolentus)),Bradyporus_docilis)),(((Alauda_brachydactyla,Homopholis_taczanowskius),(Hysterocrates_leucoptera,Phrynosoma_caerulea)),Sturnus_glacialis)),(((Buteo_tentaculatum,Dendrelaphis_mlokosiewiczi),Saxicola_hirundo),Pusa_brevipes)),(((((((Anodonta_hongkongensis,Terpsihone_diadema),Odobenus_situla),Oxyura_caucasicus),Corallus_caudata),(((Dryobates_completus,(Gazella_docilis,Hottentotta_caryocatactes)),Homopholis_purpurascens),Gonyosoma_valliceps)),(Anolis_chinensis,Vormela_sp)),Psalmopoeus_mysticetus)),Rissa_avinivi),Brachyramphus_lavaretus),Gazella_gibbosus),Pyrrhocorax_marinus),Bradypodion_anatina),Argynnis_cranwelli),Acanthis_calligaster),(Eubalaena_sanguinolentus,((Falco_bedriagai,Monachus_oedicnemus),Vanellus_clericalis))),(((Capella_macularius,(Nyctixalus_leucopsis,Phormictopus_aleutica)),Pachytriton_turtor),Lamprophis_glareola)),(Bradypodion_sibilans,((((Chlamydosaurus_plathyrhychos,Lyrurus_bicinctores),Phoca_ichthyaetus),(Gyps_deminutus,Hysterocrates_proteus)),Poephagus_belliana))),Petrocincla_lagopus),Apodora_stylifer),Bradyporus_fulvus),Spalax_avosetta),Syrrhaptes_vanellus),Platalea_vitulina),(Anas_equestris,Xenophrys_jaculus)),Phyllopneuste_calyptratus),((Chrysopelea_garulla,sibiricus_temminckii),Nipponia_bengkuluensis)),(((Certhia_ibera,(Rhodostethia_naumanni,Triturus_triangulum)),Rhodostethia_avocetta),Ctenotus_sauritus)),Tursiops_sp),((Anodonta_cristatus,Bradypodion_dispar),(Leiopython_kraepelini,Nerodia_hasselquistii))),Asthenodipsas_weberi),Capella_indica),Margaritifera_vermiculatus),Aythya_lutris),(Pareas_galeatus,Porphyrio_marmoratus)),(Androctonus_interiorata,Lepus_auriculatus)),((Hysterocrates_altaica,Plethodon_davidiana),Ursus_leporosum)),Acanthosaura_papuana),(((Acheron_taczanowskius,(Mergus_mlokosiewiczi,Rhesus_milii)),Underwoodisaurus_onocrotalus),Siniperca_opimus)),((Arenaria_parvus,Net_albigula),Querquedula_coturnix)),Anthropoidae_pallasii),Remiz_buccata),(((((Corvus_collaris,(Holaspis_gebleri,Sceloporus_punctatus)),Saiga_chrysaetos),Porphyrio_monilis),Parabuthus_physalus),Rufibrenta_subrubrum)),Lasiodora_guttifer),(((Acanthoscurria_caudicinctus,(((((Apalone_caeruleus,Nyctixalus_ussuriensis),(Paradoxornis_prasina,Ruticilla_Jankowskii)),Pituophis_aegyptia),Leiurus_sanguinolentus),Pogona_arenarius)),Mochlus_leucoryphus),Rhacodactylus_spinifera)),Anodonta_minutus),(((((((((((((Acanthoceros_enhydris,Carabus_tinnunculus),Acipenser_pedo),((((((((((((((((Acanthogonatus_wumuzusume,Grampus_ammon),Theloderma_salei),Ursus_adamsii),Vulpanser_dorsalis),(Anas_rufina,Selenocosmia_calligaster)),(((Bubulcus_clypeatus,Lutra_cyanus),Eudramias_paradisi),(Dasypeltis_getula,((Pelusios_proteus,Synthliboramphus_oenanthe),Xenochrophis_baeri)))),Circus_korschun),Rhacophorus_imperator),Pachytriton_franckii),(((((((((((Aegialifes_mlokosiewiczi,((((Amphiuma_cranwelli,Eucratoscelus_fernandi),Castor_nelsonii),Pagophila_parvus),Rissa_macularius)),Carabus_vastus),Cygnopsis_ibera),(Camptoloma_taeniura,Circaetus_odoratus)),Hottentotta_sebae),Glareola_perdix),Eucratoscelus_peregrinus),Eubalaena_eremita),Gazella_montela),Apodora_bedriagai),((((Allactaga_glaucescens,(Capreolus_walti,Emberiza_xanthocheilus)),(Bradypodion_barroni,(Pelodytes_insignis,Physignathus_hyemalis))),Sceloporus_cancerides),Pterinochilus_pallidus))),Spalerosophis_fasciolata),Basiliscus_nivicola),Mabuya_modestus),Chrysemys_gecko),Balaenoptera_marcianus),Philothamnus_melanostictus)),(Grus_fulvus,((Nyctixalus_oenanthe,Saga_cancerides),Passer_carolinensis))),(((Alaus_semipalmatus,((((Balaena_ferina,Pedostibes_smaragdina),Paramesotriton_aceras),Lampropeltis_cyanogaster),Ketupa_mutabilis)),Osteopilus_moschata),((((Alloporus_collybitus,(Lamprophis_manul,Lycaenopsis_kopsteini)),Hydrochelidon_lividum),(Anodonta_deminutus,Antaresia_schneideri)),(((Branta_casualis,Pareas_subniger),Chondropython_gecko),(((Branta_erythronota,Sturnus_laevis),Grampus_cachinans),Chen_serricollis))))),(((((((((((((((Agama_vertebralis,Kinosternon_grandis),(Mylopharyngodon_glottis,Tetrao_doctus)),Latastia_chuatsi),Avicularia_insularis),(((Coenobita_grossmani,Cuculus_wislizeni),Larus_naumanni),Oligodon_insularis)),(Camptoloma_carnivorus,((Chrysemys_maldivarum,(Falco_dominicus,(Geochelone_collaris,Ziphius_minor))),Perdix_virgo))),((((((((((((((((((((((Alectoris_coelestis,Eudramias_indica),Lyrurus_similis),Oceanodroma_chrysargos),Pseudemys_manul),Chelus_maritimus),Rhodostethia_giganteus),(Aythya_melonotis,(((Eryx_arvensis,Rhabdophis_calligaster),Halichoerus_xanthocheilus),Nipponia_tetrax))),Sus_tigrinus),(Ameiva_lutra,Gypaetus_oxycephalum)),Bombyx_sibilans),(Boiga_tricolor,Machetes_oxycephalum)),(Litoria_venulosa,Theloderma_coelestis)),(((Chrttusia_rhymnus,Nhandu_nivicola),Heteroscodra_fimbriatus),Pseudemys_galericulata)),(Brachypelma_clericalis,Nyctaalus_platyrhinos)),Philomachus_vanellus),Chelus_lineatus),Teratoscincus_tatarica),Sturnus_hungaricus),Pyrgilauda_kazanakowi),Citharacanthus_reticulatus),((Nemachilus_picta,Querquedula_amboinensis),Tupinambus_oenanthe)),((((((((Anodonta_corone,Cinclus_caudolineatus),Bombyx_korschun),(Madagascarophis_carbonaria,(Megaloperdix_sanguinolentus,Nyctixalus_flavirufa))),Enhudra_albocinctus),Perdix_paganus),(Phasianus_cristatella,Scolopax_sanguinolentus)),Neolycaena_carinatus),Aplopeltura_fasciata))),(((((Elaphe_acanthinura,Sphenops_zagrosensis),Tetraogallus_adamsii),Nemachilus_angustirostris),Scolopendra_nigrolineatus),((Hydrosaurus_meles,Philothamnus_sp),Mabuya_atthis))),(Alectoris_auriculatus,(Pterinochilus_saxatilis,Ptyodactylus_atrigularis))),Epicrates_variabilis),(Alaus_battersbyi,Archispirostreptus_viridis)),Grammostola_africanus),Balaenoptera_grossmani),Almo_classicus),Rissa_franckii)),(((((Allactaga_bengalensis,Trachemys_caeruleus),Anodonta_helvetica),Regulus_crispus),(Apus_zagrosensis,Phasianus_variabilis)),Amphiuma_tadorna)),Monodon_cingulata),Cuora_climacophora),Ruticilla_lehmanni),((Cyriopagopus_dennysii,crecca_guentheri),(((Lampropeltis_rudicolis,Lystrophis_interpres),Natriciteres_bukhunensis),Ptychozoon_franckii))),(Cyclagras_gobio,Marmota_lutris)),Avicularia_strepera))),Apalone_arseniavi),Tupinambus_mystaceus),Pelomedusa_albocinctus),((((((((((((((((((((((((((Allactaga_arcticus,Bufo_glareola),Sorex_angustirostris),Phalacrocorax_cliffordii),Leiopython_tenuirostris),Bombycilla_pyromelana),(Ctenotus_fuliginosus,(Cygnopsis_mystacinus,(Geochelone_stagnalis,(Otis_garmani,Vipera_perrotetii))))),Lobipes_tenuirostris),(((((((((Anthropoides_weliczkowskii,Streptopelia_rupestris),((((Bombina_middendorffi,Haplopelma_alcinous),Hadogenes_plumifrons),Psammophis_dactylisonans),(Oxyura_fiber,Recurvirostra_salvator))),Chettussia_vertebralis),(Chamaeleo_femoralis,Ptyodactylus_standingii)),Saxicola_helena),(((Eunectes_hasselquistii,Norops_aegagrus),Heterodon_bicoloratum),Nemachilus_pusilla)),(((Canis_tigrinus,Varanus_tatarica),Hemitheconyx_fasciolata),Megaloperdix_casualis)),(((Babycurus_agama,Epicrates_piscator),(((Buthacus_naumanni,Sterna_difficilis),Gonocephalus_pelagicus),Pelodiscus_leptochelis)),Bos_terrestris)),Thymallus_galactonotus)),((Bronchocela_dorsalis,Glareola_septentrionalis),Regulus_colubrinus)),Dyscophus_angustirostris),((Ceratophrys_pelagicus,Thymallus_argali),Emydura_melleri)),Damon_scrofa),Philomachus_cavimanus),(Haliaetus_constricticollis,Phrynocephalus_godlewskii)),Lyrurus_pardus),((Dafila_sirtalis,((((Hadogenes_alpina,Pseudemys_doctus),Limnaeus_edulis),Hysterocrates_brachydactyla),Mabuya_gemmicincta)),Trionyx_serricollis)),Bronchocela_mandarina),(Cyclagras_karelini,Phalaropus_tarda)),Apalone_anachoreta),Bufo_communis),Bronchocela_tatarica),(Balaenoptera_terrestris,Eudrornias_marcianus)),(((Argynnis_amboinensis,(Argynnis_krueperi,Mergus_dubius)),((((((Bombina_capra,Coleonyx_mandarina),Diomedea_himalayanus),Upupa_glottis),(Calidris_margaritifera,((Chrttusia_temminskii,Psalmopoeus_salvator),Sceloporus_medici))),Triturus_orientalis),Citellus_dahurica)),Saxicola_emarginatus)),Moschus_carolinensis),(Leptobrachium_glutinosus,Scincus_govinda)),Pica_blakistoni)),Falcipennis_africanus),(((Aegypius_ridibundus,((Allactaga_rubicola,(Emydura_emilia,Squaterola_gordoni)),Lobipes_mackloti)),(((((Alaus_arizonensis,(Lobipes_kuhli,Tadarida_semipalmatus)),(Calotes_blythi,Scaphiophryne_fernandi)),Rhynchaspis_bellii),((((((((Callipogon_ceterus,Coleonyx_martensi),Thamnophis_percnopterus),Fregilegus_collectivus),Vanellus_monoceros),Cyclemys_gregarius),Testudo_scalaris),Spermophilus_dulkeitiana),Hydrochelidon_fiber)),Anodonta_gratiosa)),Antilope_rufina)),Callipogon_deremensis),(((Apodora_guttata,Boa_physalus),(Turdus_mycterizans,Zosterops_terrestris)),Hadrurus_barbatus)),((Agama_mirabilis,Anolis_leucoptera),((Coturnix_quadrivirgata,Haplopelma_melonotis),Nipponia_bicinctores))),(Moschus_mysticetus,Telescopus_saxatilis)),Phalacrocorax_squamatus),Dipsosaurus_colubrinus),((Kinosternon_multifasciata,Sterna_tetrax),Rhodostethia_tataricus)),Butastur_rubida),Trachemys_grunniens),((Bombyx_gordoni,(Gallinago_gemmicincta,Trachemys_scabra)),((((Cuora_reinwardti,Gallinago_zagrosensis),Phalacrocorax_situla),Damon_radiata),Pelecanus_corone))),((((((((((((((((((((Acanthogonatus_sinensis,(Madagascarophis_mexicana,Osmoderma_getula)),Anthropoidae_conicus),Arctomys_ochropus),(Bombycilla_apollo,(Dyscophus_aureostriata,Elaphe_dione))),Phelsuma_troglodytes),((((((Bos_rapax,Falco_guangxiensis),Cervus_nigropalmatus),Lasiodora_tigrinus),Phyllopneuste_colchicus),Crotaphytus_interiorata),((Dipus_serpentina,Rhesus_standingii),Triturus_timidus))),Teratolepis_armata),(((((((((Ahaetulla_turtor,((Boa_ferrumequinum,Hirundo_borealis),Bronchocela_avocetta)),((((((((((((Apus_prominanus,(Leiolepis_turneri,Osmoderma_flava)),Rhacophorus_australis),(Lystrophis_canus,Neolycaena_subminiatus)),Poephagus_veredus),Sitta_mackloti),Burhinus_lehmanni),(Budytes_miliaris,(((Cuon_meermani,Holodactylus_plumipes),((Dipus_moschiferus,Sphenops_temminskii),Phalaropus_galeatus)),(Milvus_gibbosus,Sitta_ferox)))),Gerrhosaurus_chuatsi),((((((((Chelydra_vertebralis,Parnassius_longicollis),Euspiza_salamandra),Macrorhamphus_nigriceps),(Cuon_jaspidea,Opheodrys_leucoryphus)),Minipterus_buccata),Crotaphytus_major),Underwoodisaurus_hardwickii),((Pseudorca_monorhis,Tadarida_fusca),Vulpanser_chrysaetus))),Grus_dubius),(Carabus_teniotis,Ziphius_borealis)),Hydrochelidon_maurus)),Tursiops_nippon),Norops_lutris),Bradyporus_nigriceps),(((((Cervus_celeber,Hadrurus_placidus),Mustela_unicolor),(Desnana_schrencki,Limnaeus_tarda)),Oxyura_lehmanni),Phrynocephalus_himalayensis)),Fuligula_albicilla),Capeila_kingii),Vulpes_duplex)),((Anodonta_pica,((Cuculus_ibera,Cuora_elaphus),Ursus_aspera)),(((Emberiza_avosetta,Pituophis_lasiopterus),(Perdix_corticale,Uncia_hypomelus)),Gyps_oedicnemus))),(Capreolus_cianeus,(((Castor_rufina,((((Chettussia_tuberculosus,Eremophila_altaica),Rangifer_similis),Plegadis_eximia),(Gerrhosaurus_ussuriensis,(Philomachus_exquisita,Ptychozoon_lobatus)))),Pyrrhocorax_glottis),Certhia_irregularis))),(((((((((Actitis_geyri,(Eubalaena_lineatus,Psalmopoeus_bicoloratum)),Telescopus_alcinous),((((Chrysemys_enhydris,Emberiza_vulgaris),Xenopeltis_hemilasius),Phrynomerus_carinata),Mylopharyngodon_cornix)),sibiricus_cyanochloris),(Capra_pygmeus,Pelomedusa_bedriagai)),Castor_dahurica),((Bronchocela_alpinus,Chrttusia_pygmeus),Leiolepis_nupta)),Atrophaneura_albicilla),(Archispirostreptus_maurus,Phrynops_fuscatus))),(Chelydra_meermani,Circaetus_erythronotus)),(Eudrornias_semipalmatus,Pusa_notaeus)),Mylopharyngodon_argentatus),(Hirundo_leucorodia,Pituophis_oxycephalum)),Spizaetus_sanguinolentus),Dipus_catenifer),(Anas_maculatum,Heterodon_serricollis)),((Leptopelis_sphenocercus,Vipera_temminckii),Ninox_haliaetus)),Buthacus_musculus)),Cyclemys_turneri),(((Acanthosaura_eburnea,(((((((((((((Actitis_clypeatus,(((((((((((((((((Aegialifes_communis,Monticola_apollo),Callipogon_iankowskii),Balaena_crispus),(((((Anolis_sibirica,(Dahurinaia_ovata,Morelia_arenarius)),Bombina_hilarii),Recurvirostra_carbonaria),Prunella_mutabilis),Rhabdophis_comicus)),Pseudorca_gallicus),Paradoxornis_korschun),Bradypterus_intermedia),Colaeus_leptochelis),Tadarida_kraepelini),Tupinambus_ruficollis),((Balaenoptera_leucoryphus,(Calotes_pachypus,Monachus_erythropus)),(Fulica_leucoptera,((Hydrochelidon_irregularis,(Mochlus_kingii,Nerodia_tolai)),Lagenorhynchus_circia)))),((((Almo_leuconotus,(Balaena_geyri,((Burhinus_fernandi,Selenocosmia_nasuta),((Eutamias_occitanus,Lepus_heliaca),(Leiurus_infrafrenata,Pusa_epops))))),(Chrttusia_venulosa,Osmoderma_breitensteini)),Coenobita_hypomelus),Spalerosophis_gecko)),Chlamydosaurus_boulengeri),(Anthropoidae_scincus,Odobenus_epops)),(Chelydra_situla,Ctenosaura_tadorna)),Damon_rapax),Rangifer_dulkeitiana)),((Argynnis_cynodon,Glareola_vulgaris),Grus_alba)),Platemys_circia),(((Brachypelma_crassicauda,(((((Dendrelaphis_calamita,(Pareas_plathyrhychos,Streptopelia_armeniacus)),Nyctaalus_gebleri),Lampropeltis_clinatus),Podoces_subrufa),Himantopus_celeber)),Iguana_perdix),(Chelodina_canus,(Emydura_ochropus,sibiricus_porzana)))),Columba_hypoleucos),Gypaetus_hendersoni),(Lycaenopsis_godlewskii,Parabuthus_torquata)),Asthenodipsas_sphenocercus),Margaritifera_ferina),Pseudemys_clarus),(Ctenosaura_lagopus,(Dyscophus_azureus,Picus_cachinans))),(Mabuya_heterolepidotus,Zosterops_perrotetii)),Falco_pardalis)),Gecarcinus_vertebralis),((Acipenser_eremita,(Machetes_albertisii,Spalax_leuconotus)),(Arenaria_miliaris,Ninox_longicaudata)))),Ctenotus_decor),Rhynchophis_orientalis),(Acipenser_ameiva,Aphonopelma_taczanowskius)),(Lutra_caninus,Osmoderma_plathyrhychos)),Cuculus_enydris),Bradypterus_ciliatus),Hemiscorpius_argali),(Cervus_cyanochloris,Megaloperdix_marcianus)),Aegialites_colchicus),Larus_Anas),Bradypodion_avocetta),((((((((((((Citellus_teguixin,Hydrosaurus_krueperi),Riparia_mlokosiewiczi),(Leiurus_cyanus,Myotis_constricticollis)),Iguana_czerskii),Xenochrophis_unicus),Panthera_castaneus),Ortigometra_aegyptia),Recurvirostra_punctatus),Monticola_terrestris),Eremophila_imperator),Leiocephalus_rosmarus),Scolopendra_armeniacus)),((((Boa_japonensis,(Nyctixalus_pachypus,Salamandra_sujfunensis)),Chelodina_versicolor),Terpsihone_tatarica),Regulus_arizonensis)),Onychodactylus_similis),((((((((((Aegialites_montela,Sceloporus_albirostris),(Monticola_pygmaeus,Parnassius_paradisi)),Ctenotus_quinquestriatus),(Gekko_carnifex,Nucifraga_franckii)),Ovis_africanus),Eumeces_amethistina),(Arenaria_communis,Gerrhosaurus_glaucescens)),Minipterus_molurus),((Androctonus_cliffordii,Mesoplodon_turneri),Gambelia_virgo)),((Apodora_enydris,Ziphius_varius),Dasypeltis_rostratus))),(Agama_sagrei,(Archispirostreptus_weberi,Grammostola_adspersus))),(((((((((Acanthosaura_bonasus,((Buthus_virgo,Sturnus_gregaria),((((Oligodon_politus,(Pandion_lutris,Rissa_lutris)),Selenocosmia_aleutica),Pusa_americanus),Tursiops_percnopterus))),Aix_leucotus),(Balaena_macrops,Vormela_scalaris)),Rhodostethia_dactylisonans),((((((((Bradyporus_fuscatus,((Calidris_giganteus,Oenanthe_torquatus),Totanus_amethistina)),Homopholis_leporosum),Chettussia_aestivus),(Hottentotta_melonotis,Testudo_albicilla)),Phalacrocorax_chamaeleontinus),Phyllopneuste_albatrus),Cuculus_irregularis),Grampus_fragrans)),Numenius_salvator),Sterna_japonica),Phasianus_aspera),((((((((((Alcedo_scincoides,Sphenurus_wumuzusume),Cottus_azureus),Himantopus_rufina),(Otis_leucorodia,Terpsihone_cocincinus)),(Bos_prasina,Fregilegus_glacialis)),Madagascarophis_euptilura),Querquedula_blythi),Laudakia_scalaris),(Dahurinaia_scincoides,((Eumeces_aeruginosus,Rhodostethia_garmani),Sterna_vereda))),Eudramias_nebrius))),(((Chrttusia_sauromates,((Ctenosaura_maritimus,Salmo_borealis),(Cuora_leucoryphus,Salvelinus_nigrolineatus))),Net_cavirostris),Osmoderma_filipjevi)),((((Babycurus_ferrumequinum,Himantopus_floridana),Remiz_tridactylum),Elaphe_indicus),Holodactylus_vertebralis)),Parus_aeruginosus),(((((Antilope_hosii,Xenochrophis_armata),Caiman_subruficollis),Lamprolepis_piceus),(Dipsosaurus_docilis,Perdix_prasina)),Lagenorhynchus_platycephala)),Scaphiopus_means),(Leiolepis_plumifrons,Rhinolophus_sinensis)),Pleurodeles_vulpes),((Heteroscodra_arizonensis,Mochlus_guttifer),Pedostibes_sibirica)),Buthacus_keyzerlingii),(Cuon_armeniacus,Pandion_diffidens)),Vormela_vastus),Sorex_ceterus),(Branta_radiata,(Eutamias_elegans,Lampropeltis_lesueurii))),(((((((((((((Accipiter_modestus,Camptoloma_plathyrhychos),(((Chettussia_marmorata,Desnana_eulophotes),((Chrysopelea_elaphus,Holodactylus_aeruginosus),(Saxicola_spaldingi,Squaterola_davidiana))),Trachemys_politus)),Chrysemys_fulvus),Eulabeia_flavigularis),((Brachyramphus_tentaculatum,Scolopax_monachus),Pica_subrufa)),(Burhinus_aristotelis,Rufibrenta_paganus)),Net_maculatum),(Ceratophrys_eburnea,Polypedates_deminutus)),(Lepidobatrachus_completus,Pseudorca_citrsola)),(((((((((Agama_japonensis,Vipera_teniotis),(((((Castor_vittatus,(Chlamydosaurus_taezanowskyi,Leiopython_miliaris)),Hyperoodon_subniger),(Gallinago_xanthocheilus,Ninox_avicularia)),(Castor_vulpes,Phrynosoma_lividum)),Eubalaena_arcticus)),Ortigometra_bimaculata),((Athene_flavescens,(Haplopelma_hemilasius,Scolopendra_veredus)),Certhia_sibiricus)),Liasis_purpurascens),Rissa_hyperboreus),Nhandu_macrops),Syrrhaptes_kazanakowi),Grammostola_maldivarum)),Squaterola_diffidens),Chalcides_vittatus),(((Boiga_dione,Parnassius_rutilans),Chlamydotis_cyanogaster),Philothamnus_taeniura))),Aythia_uluguruensis),((Ketupa_himantopus,Phormictopus_madagascariensis),Scolopendra_hemionus)),(((Alloporus_plathyrhychos,((Citellus_armeniacus,Tupinambus_maculata),Phrynomerus_microlepis)),Castor_molurus),(Bradyporus_haliaetus,Chelodina_ion))),Ophisops_turtur),(Aquila_dispar,(((Bradypodion_perrotetii,Vormela_graeca),((((((Burhinus_politus,Holaspis_auriculatus),Parnassius_scrofa),Telescopus_cioides),Rhabdophis_pulchripes),((Chrttusia_insignis,Leiolepis_cristatus),Trionyx_murinus)),Eremophila_gallicus)),Capeila_guentheri))),(Porphyrio_colubrinus,Saga_guttifer)),((((((Eubalaena_lagopus,Gyps_subruficollis),Leiocephalus_canagica),Phrynocephalus_jacksoni),Neolycaena_galeatus),Podoces_sepsoides),Sterna_brachydactyla)),(((((Alopex_leporosum,Vanellus_pygmaeus),((Coregonus_giganteus,((Pandinus_macrops,Squaterola_albigula),Selenocosmia_australis)),Cyclemys_saxatilis)),((Balaenoptera_lepturus,Gekko_helvetica),((Budytes_jaculus,((Buthus_stimsoni,Middendorffinaia_vermiculatus),Hirundo_ammon)),Eutamias_moschata))),Caiman_modestus),Eubalaena_leucomystax)),Acanthosaura_vipio),Equus_stagnalis),Moschus_atrigularis),((((((((((((((Accipiter_scincoides,(Allactaga_minutus,Marmota_oedicnemus)),Hemitheconyx_hispida),((((Bombyx_clarus,Haplopelma_aeruginosus),Leiopython_geniculata),Chrysopelea_caudatus),Osmoderma_pachypus)),Vanellus_cyanus),(((((Falcipennis_castus,(Phormictopus_decorus,Tropidurus_noctua)),(((Kaloula_classicus,Myotis_bifasciatus),Salamandra_torquatus),Squaterola_cambridgei)),Lobipes_caesius),Scolopendra_triangulum),Seokia_plumifrons)),Python_graeca),Zosterops_gordoni),((Calidris_blakistoni,(Erpeton_fluviatilis,Vormela_quadrivirgata)),Hemiscorpius_corticale)),(Chlamydotis_salamandra,Pyxicephalus_cancerides)),Leiolepis_teniotis),Phrynohyas_himantopus),(Capra_mexicanum,Iguana_caryocatactes)),Natriciteres_radiata),Arctomys_gallinago))),(Aix_noctua,Corytophanes_avinivi)),Theloderma_hirundo),(((Dahurinaia_cinereus,Gecarcinus_minor),Spermophilus_crucigera),(((Kassina_indicus,Ursus_ammon),Scaphiophryne_carinatus),Upupa_fluviatilis))),(((((((Acanthis_celeber,Monachus_indicus),Eutamias_ichthyaetus),(Bronchocela_pardus,Heterodon_ochropus)),(Nyctaalus_walti,Pachytriton_hilarii)),((Accipiter_nivicola,(((Aegialifes_rufodorsata,Kinixys_dennysii),(((((Apus_major,(Ctenosaura_schneideri,((Cygnus_mutabilis,Tiliqua_zagrosensis),(Natriciteres_lesueurii,Phalaropus_pardus)))),((((Certhia_nivicola,(Erpeton_exquisita,Leptopelis_nivicola)),(Hyla_femoralis,Lanius_tetrax)),(((((Ciconia_alcinous,((Citharacanthus_angustirostris,Haliaeetus_haliaetus),Uroplatus_agama)),Iomachus_arvensis),Philomachus_leucocephala),Eubalaena_amboinensis),Phormictopus_leucotus)),Tursiops_obsoleta)),((Budytes_hendersoni,Gallinago_pyromelana),Teratoscincus_bengalensis)),((((Arenaria_aspera,(Casarca_crocodilus,Lasiodora_savignii)),(((Cyclemys_mitratus,Eutamias_margaritifera),Tropidurus_labiatus),Pterocles_crocodilus)),Streptopelia_jubata),Budytes_eburnea)),(Colaeus_moschiferus,Vulpanser_mlokosiewiczi))),Oxyura_dubius)),Phylloscopus_falcipennis)),((((((((((((((((((((((((((Acanthogonatus_porphyrio,(Pseudorca_bengkuluensis,Pyrgilauda_catenifer)),((((Aegialifes_pholeter,(Columba_canus,Minipterus_cristatella)),Lycaenopsis_boschas),(((Emberiza_nebrius,Parnassius_crispus),(Osteopilus_troglodytes,Saga_jacksoni)),Lepidobatrachus_arizonensis)),Rissa_ochropus)),Scaphiopus_caninus),((((((((Alloporus_smithii,Capella_subniger),(Cervus_ulikovskii,Hirundo_japonica)),Remiz_cingulata),Capreolus_bairdii),Cynops_hyemalis),Pedostibes_daurica),(Salamandra_flava,Strepsilas_tinnunculus)),Philomachus_porzana)),(Epipedobates_ridibundus,Vipera_rutila)),((Dasypeltis_collectivus,Net_chamaeleontinus),Equus_circia)),Teratolepis_vitticeps),Capreolus_flavolineata),Kaloula_oenanthe),(Eschrichtius_lasiopterus,Pelusios_leptochelis)),((((((((((((Acheron_vipio,Phrynops_godlewskii),((Alcedo_caeruleus,Mustela_nelsonii),Vormela_vitulina)),((Epipedobates_circia,Limnodromus_guttifer),Megaloperdix_clypeatus)),((Bradypodion_naumanni,crecca_flammea),Kinixys_solitaria)),Odonthurus_ciliatus),((Apodora_eremita,(Felis_paradoxus,Polypedates_scrofa)),((Balaena_pulchra,(Scolopendra_pygmaeus,Ziphius_citrsola)),(Bronchocela_cavimanus,Phrynops_clericalis)))),((Bombus_celer,Monodon_albopillosum),Ovis_fimbriatus)),(Corvus_radiata,(Ortigometra_adspersus,Pratincola_medici))),((((((((((((((((((((Actitis_bicinctores,((Anas_molurus,(((Buthacus_gibbosus,((Emydura_nupta,Eucratoscelus_korschun),Heterodon_cynodon)),Chelus_papuana),Plethodon_doctus)),(((Eryx_tigris,Uncia_riparia),Ingerophrynus_kopsteini),Falco_gebleri))),Pachytriton_murinus),((Gavia_spilota,Morelia_catenifer),Thecla_deserti)),(((((((((((((((Ahaetulla_epops,(((((((Allactaga_caudata,Pachydactylus_japonica),Lepidobatrachus_mongolica),Grus_plathyrhychos),((((((((((Antilope_holbrooki,Sus_anser),Castor_rubida),(Boa_kurilensis,Pleurodeles_colombianus)),Leiocephalus_labiatus),Rhacodactylus_graculus),(Eurynorhynchus_isabellina,Ptychozoon_albatrus)),Lamprophis_giganteus),Homalopsis_perrotetii),Coenobita_punctatus),Cygnus_spinifera)),Grampus_coloratovillosum),(Bombyx_leucogeranus,Furcifer_medici)),Argynnis_oenanthe)),Psalmopoeus_prasina),((Gekko_apus,Gyps_scincoides),Tadorna_pholeter)),Fuligula_difficilis),Platalea_viscivorus),(((Anthropoides_shadini,(Fulica_scutulata,Ophisops_sinensis)),(((((Balaena_fragrans,Bombyx_picta),Chalcides_miliaris),Leiolepis_nipalensis),Phasianus_piceus),Felis_pyromelana)),Dahurinaia_amboinensis)),Phrynops_venulosa),Apus_regius),((((Fulica_hilarii,Recurvirostra_galeatus),Plegadis_hendricksoni),(Pelodytes_martensi,(Tryngites_javanica,Tupinambus_nigrolineatus))),Leiopython_trianguligerus)),Rhacophorus_sanguinolentus),Chrysemys_glareola),Strepsilas_totanus),Corvus_taxus),Natriciteres_viscivorus),Mylopharyngodon_mystaceus)),Hirundo_aleutica),Apodora_cygnus),Diomedea_rostratus),(Aegialifes_ridibundus,(Dasypeltis_ciliatus,Melanocorypha_erythronota))),(((((((((((Aegypius_castaneus,Sceloporus_borealis),Pandinus_eburnea),((Calidris_proteus,Pyrrhocorax_dispar),Sorex_insularis)),((Cyriopagopus_novaeguineae,Eschrichtius_aspera),Hydrochelidon_paganus)),((Hadogenes_odoratus,Siniperca_parvus),Phrynocephalus_pygargus)),Lyrurus_arenarius),Grammostola_pelagicus),Arenaria_ciliatus),Eunectes_clypeatus),((((((((((((Agama_tadorna,Homopholis_wumuzusume),(Amphiuma_pugatshuki,Dahurinaia_naumanni)),((Buthacus_aceras,Gerrhosaurus_taxispilota),Philacte_leucopsis)),Cervus_hyemalis),Scaphiophryne_ibera),Damon_vitticeps),Melanocoryhpa_ridibundus),Meles_glottis),(Coleonyx_minutus,Hyla_mnemosyne)),(((((Alauda_mutabilis,((Aphonopelma_leporosum,(Kinixys_clarus,Litoria_pygargus)),Aquila_guineti)),Boa_pygmeus),Balaenoptera_unicolor),Cyclagras_bengkuluensis),Felis_corsac)),Hadrurus_insularis),((Capella_riparia,Python_decorus),((Hemitheconyx_nigropalmatus,Pusa_constricticollis),Testudo_helvetica)))),Teratolepis_bicinctores)),Hadrurus_gratiosa),(Dendrobates_vipio,Nemorhaedus_gobio)),((Ambystoma_horridum,Phrynocephalus_rufus),Latastia_carolinensis)),Cervus_milii),Sphenurus_gemmicincta),((Babycurus_lobatus,Ovis_cristatellus),Pratincola_caelebs)),((((Anthropoidae_kurilensis,(((((Avicularia_sinensis,Physignathus_tricolor),Lamprolepis_geniculata),(((Buteo_buccata,Vulpanser_odoratus),(Chlamydotis_docilis,(Grus_leucocephala,(Leptobrachium_moschata,(Litoria_sp,Tamias_grunniens))))),Tylototriton_ocellatus)),Siniperca_aeruginosus),Selenocosmia_exanthematicus)),(Buthus_exquisita,(Odobenus_weberi,Pusa_hongkongensis))),(Phrynomerus_dominus,Pterinochilus_leucogeranus)),Lamprolepis_seemani)),(((Cyclemys_tricolor,Phrynops_serpentina),Underwoodisaurus_kuhli),Falcipennis_semipalmatus)),Gazella_anatina),Epipedobates_armeniacus),(((((((((Allobates_rusticolus,(Apalone_apollo,(Phalaropus_solitaria,crecca_troglodytes))),Branta_dispar),(((Bufo_cavirostris,(Gavia_eremita,Scolopendra_infrafrenata)),Limnodromus_maritimus),Polypedates_aegagrus)),Eremophila_cianeus),(Pareas_tenuirostris,Phrynops_unicus)),(Oenanthe_wislizeni,Rhacodactylus_casualis)),Natriciteres_helvetica),Falcipennis_pulchripes),Nyctaalus_arvensis))),(Nipponia_mlokosiewiczi,Ziphius_rudicolis)),((Chen_mystacinus,(Haliaetus_morinellus,Homalopsis_reinwardti)),((((Chettussia_xanthocheilus,Sus_guentheri),Lutra_garulla),Passer_cavirostris),(((Eubalaena_emilia,Ortigometra_subruficollis),Perdix_garmani),Mogera_grunniens)))),(Butastur_cristatellus,Rhabdophis_exquisita))),Odobenus_glacialis),(((((Acanthosaura_rutila,Cuora_brevipes),Coturnix_fasciata),Accipiter_canagica),Alloporus_tataricus),Philacte_percnopterus)),Brachypelma_angustirostris),Dipsosaurus_duplus),(Anodonta_grupus,Falco_undulata)),Bombyx_caudatus),(Nemachilus_dentatus,Tylototriton_guineti)),Phoca_porphyrio),(Grampus_striatus,Lamprolepis_bairdii)),((Chelodina_agama,(Oceanodroma_fiber,Turdus_bewickii)),Holaspis_clinatus)),Chlamydotis_hispida),Cyclagras_mackloti),((((((((((Aix_galeatus,Cottus_gregarius),Osteopilus_fiber),Pelodiscus_modestus),Capreolus_nyroca),(Hadrurus_flavigularis,(Homalopsis_horridum,Oedura_castaneus))),Syrrhaptes_caudolineatus),(Lepus_grossmani,Tadarida_cherrug)),(Latastia_marmoratus,(Scolopendra_garmani,Varanus_viridescens))),Mylopharyngodon_armata),Allobates_pardalis)),Eschrichtius_metallica),((Eirenis_enhydris,(Rhabdophis_taczanowskius,Vormela_kingii)),Macrorhamphus_caniceps))),Paraphysa_longipennis)),Phelsuma_hemionus),(((((((((Amphiuma_mutabilis,(((Eunectes_grossmani,Lyrurus_adamsii),Xenopeltis_cyanogenys),Salamandra_galeatus)),Trachemys_limosa),Procellaria_nigrolineatus),(((Apus_maurus,Trionyx_guttata),(Athene_celer,(Cervus_platyrhinos,Liasis_regius))),Fulica_laevis)),(((((((Basiliscus_subruficollis,Rhabdophis_Jankowskii),Chlamydosaurus_alterna),Dasypeltis_caniceps),(Lepus_quadrivirgata,Riparia_arseniavi)),Moschus_isabellina),Mabuya_cristata),Cyclemys_peregrinus)),(Picus_bellii,Pleurodeles_insignis)),(Hyperoodon_cristatellus,Uromastyx_heliaca)),(Hydrochelidon_aleutica,(Pachytriton_armeniacus,Tupinambus_madagascariensis))),Poephagus_eulophotes)),Chen_viridescens),((((((((((((((((((Acanthogonatus_pulchra,Eubalaena_stagnalis),((((((((Acanthoscurria_salamandra,Lycaenopsis_means),(Columba_caeruleus,Ctenotus_pelagicus)),Megaptera_barbata),((((((((Accipiter_enydris,Capeila_trianguligerus),(((((((((((((((((((Anthropoidae_trianguligerus,((Chelodina_pusilla,Kassina_septentrionalis),Coturnix_doriae)),Chrttusia_melanostictus),Gypaetus_flava),Colaeus_piscator),Phyllopneuste_albopillosum),Polypedates_arvensis),(Myotis_regius,Sturnus_bengkuluensis)),Rhynchophis_aegagrus),Elaphe_yeltoniensis),(((Bradyporus_decorus,Pelecanus_glutinosus),Ceratophrys_ciliatus),Seokia_rupestris)),(Butastur_kazanakowi,Eunectes_albertisii)),(((Calidris_colombianus,(Chlamydotis_bedriagai,(Minipterus_salvator,Platemys_scalaris))),(Capra_bengkuluensis,Pratincola_bewickii)),Coregonus_plumipes)),Vormela_fasciolata),Capeila_mykiss),Ophisops_sanguinolentus),Phrynomerus_caudolineatus),Opheodrys_dendrophila),(Bronchocela_albocinctus,Dahurinaia_leucostomum)),Fregilegus_albirostris)),((((((((Brachypelma_alpina,Pleurodeles_carinata),Spalerosophis_nippon),Capra_leucophyllata),Odobenus_exanthematicus),Elseya_leucophtalmos),(Eumeces_wogura,(Falcipennis_cygnus,Haliaetus_clarus))),Cuora_caudatus),Sphenurus_subglobosa)),Pterinochilus_oenanthe),(Totanus_mlokosiewiczi,Xenophrys_korschun)),((Chettussia_monorhis,Grampus_physalus),Seokia_mystaceus)),(((((Ahaetulla_undulata,(Chelodina_sauritus,(Hysterocrates_turtor,((Machetes_flavolineata,Scincus_casualis),Philomachus_marcianus)))),Eudramias_jacksoni),Tringa_nippon),((((((((Anser_rudicolis,Ketupa_hendricksoni),Dahurinaia_atrigularis),((Colaeus_bobac,Rhombomys_fuscus),Paramesotriton_fuscus)),((((Crocodylus_borealis,(((Eunectes_temminckii,Oxyura_taezanowskyi),Phyllopneuste_albirostris),Himantopus_docilis)),Crocodylus_reinwardti),Hadrurus_tadorna),Lutra_merganser)),Uncia_rosea),Dendrobates_troglodytes),Pelecanus_modestus),(Paraphysa_cyanogaster,Phalaropus_taezanowskyi))),Phalaropus_peregrinus)),Dipsosaurus_intermedia)),(Emydura_picta,Net_arseniavi)),Gyps_indicus),Homopholis_pygmaeus),((Ardea_grus,Charadrius_brachydactyla),Oedura_classicus))),((Haplopelma_temminskii,Spermophilus_albertisii),Ziphius_tinnunculus)),Plethodon_cocincinus),(((((Cypselus_leucostomum,Trachemys_novaeangliae),Pseudorca_bairdi),Pagophila_rubida),Eumeces_subrubrum),Phrynohyas_cocincinus)),Rhinolophus_laevis),Dahurinaia_crispus),(((((Ameiva_nasuta,Gallinago_regius),Calotes_constrictor),(Pelodiscus_heterolepidotus,Porzana_pallidus)),(((Aquila_cinclus,(((Egretta_dentata,Pelecanus_rosea),Holaspis_nivalis),Xenochrophis_orientalis)),((((Buthacus_falcipennis,Testudo_bedriagai),(Litoria_cornix,Salmo_falcipennis)),Charadrius_carnifex),Margaritifera_vittatus)),(Limosa_cliffordii,Porphyrio_flavirufa))),(Lampropeltis_arseniavi,Leiocephalus_dentata))),((((Alopex_vertebralis,Lampropeltis_personata),(((Anthropoides_getula,Gambelia_lobatus),(((Balaenoptera_ferina,Mareca_albopillosum),Oedura_maihensis),(((Balaenoptera_korschun,Bubulcus_castaneus),((Corallus_bimaculata,Phrynosoma_cyanus),Eumeces_javanica)),Mogera_smithii))),Eremophila_spinifera)),((Capreolus_paganus,(Certhia_linaria,Pachydactylus_canorus)),Cygnopsis_citreola)),Bos_saiga)),Saiga_auriculatus),((((((Alauda_cinerea,((((Almo_melonotis,Pyxicephalus_bifasciatus),(Polypedates_emilia,Sceloporus_cyanogenys)),Pareas_madagascariensis),Epicrates_australis)),Bufo_tricolor),Madagascarophis_arcticus),Emberiza_vitticeps),Antaresia_mitratus),Ophisops_leucotus)),Capeila_miliaris),((Ethmostigmus_celer,(Lobipes_pulcher,Tamias_carinatus)),Rufibrenta_scalaris)),Certhia_cristatella),Tupinambus_rutilans),((((Homopholis_leiosoma,Paraphysa_collaris),Pseudemys_caelebs),Lyrurus_arseniavi),Pyrrhocorax_tarda)),Sphenurus_moschiferus),((((Athene_cinereus,(Budytes_erythrogastra,Phasianus_ovata)),Petrocincla_limosa),Totanus_eulophotes),(Theloderma_sudanensis,Tringa_cristatus)))),(Perdix_godlewskii,Scorpio_leptochelis)),((((((((((Accipiter_mystacinus,(Leptobrachium_mnemosyne,Xenophrys_clarus)),Picus_graeca),((Ctenosaura_calvus,Opheodrys_homeana),Hemitheconyx_aureostriata)),Philacte_filipjevi),Vulpes_graeca),Larus_macqueni),Corytophanes_melanostictus),(Ketupa_gemmicincta,Lutra_deserti)),(Fuligula_flavomaculatus,(Siniperca_homeana,Vormela_temminckii))),Tetraogallus_spaldingi)),Fulica_cepediana),Spalerosophis_avocetta),Enhydris_rufina),((((((((((Acanthogonatus_cristatellus,Chrysopelea_tuberculosus),((Candoia_agama,Eremophila_smithi),Certhia_holbrooki)),((((Alloporus_novaeangliae,((((((((Ambystoma_dactylisonans,Salmo_milii),((Aquila_gibbosus,Cyriopagopus_dentatus),Eudramias_tuberculosus)),Androctonus_viscivorus),Ctenosaura_querquedula),Bombyx_gallicus),((Chamaeleo_himantopus,(Enhydra_duplex,Osmoderma_weberi)),Remiz_pygmeus)),((Enhudra_dignus,(Halichoerus_coturnix,Kinixys_hardwickii)),Limnaeus_leucogaster)),Chlidonias_bedriagai)),(Norops_arizonensis,Tetrao_spaldingi)),Capeila_exquisita),((Egretta_leucostomum,(Parabuthus_middendorffi,Streptopelia_verrucosus)),Homopholis_scripta))),Lasiodora_dubius),(((((((Caiman_platycephala,(Latastia_azureus,Thamnophis_davidiana)),Ingerophrynus_pachypus),(((Falcipennis_zagrosensis,Lyrurus_fuellebornii),((Larus_leucogaster,Phrynosoma_calamita),(Rangifer_longipes,Seokia_opimus))),Spermophilus_fuscus)),Nerodia_decorus),Lycodon_himalayensis),Chrysopelea_nivalis),Citellus_rutila)),(((((Falcipennis_atra,Turdus_schokari),Perdix_dispar),Pyrgilauda_peregusna),((Gambelia_marmorata,((((Gecarcinus_querquedula,(Nucifraga_circia,Phalaropus_medirostris)),Tylototriton_walti),Spalerosophis_angustirostris),(Gonyosoma_collybitus,Melanocoryhpa_mirabilis))),Pelecanus_maldivarum)),Tadarida_gibbosus)),Plegadis_caryocatactes),Oxyura_floridana),Rhabdophis_nigra),Accipiter_minor)),Sternotherus_marmoratus),(((((((((Acanthis_enydris,Numenius_chrysaetus),(((((((((Atrophaneura_chukar,Chondropython_erythronota),Mareca_monedula),Rosalia_stejnegeri),Laudakia_davidiana),(Gongylophis_argentatus,Mesoplodon_monedula)),(Cuon_veredus,Rhamphiophis_gallicus)),Natriciteres_tolai),Dipsosaurus_interiorata),Psammophis_garulla)),Moschus_aestivus),(((Clemmys_fulva,Mesoplodon_pallidus),Damon_pusilla),Sorex_madagascariensis)),Dipsosaurus_ciliatus),Oxyura_cyanus),Aythia_pulchra),(((((((((((Anthropoidae_getula,Eudrornias_lutris),((Brachypelma_vulgaris,Mergus_crocodilus),(Ptychozoon_insignis,Squaterola_cyanea))),((((Bradypterus_japonensis,Seokia_zagrosensis),Mesoplodon_torquatus),Cervus_campestris),Emydura_iguana)),(Ctenosaura_cianeus,Eryx_argentatus)),(Capella_meermani,Siniperca_javanica)),Enhudra_australis),((Bubulcus_hypomelus,Odonthurus_weberi),Epicrates_ameiva)),Megophrys_armeniacus),(Gongylophis_bengalensis,Lampropeltis_flavescens)),Phrynops_schrencki),(Balaena_not,(Bubulcus_chamaeleontinus,(Ninox_dione,Totanus_Anas))))),Gerrhosaurus_hipposideros)),Gongylophis_subrufa),Triturus_helvetica),((Cuora_tetrax,Monticola_stejnegeri),Pleurodeles_rupestris)),Ctenosaura_canagica),((((((Anas_imperator,Callipogon_oxycephalum),Grus_ion),Neophron_tridactylum),Sitta_pulchripes),Monodon_gecko),Phylloscopus_mykiss)),Phasianus_truncatus),(((((((((((((((((((((((Abantias_weberi,((((((((((((((((((((((((((((Acanthoceros_emarginatus,(Chettussia_altaica,Moschus_azureus)),(Branta_regius,Eulabeia_longicaudata)),(Atrophaneura_dennysii,Pyxicephalus_eximia)),(Hemiscorpius_musicus,Leiopython_auriculatus)),Chelus_trigonopodus),Petrocincla_cambridgei),Ketupa_irregularis),((((Aythia_fissipes,((((((((Branta_monoceros,(Pachytriton_stagnalis,Porzana_clypeata)),(Chrysemys_japonica,Citellus_tarda)),(Geochelone_monachus,Polypedates_sagrei)),(Larus_ovata,Mergus_colchicus)),Pleurodeles_carinatus),Latastia_rubicola),Gonyosoma_insularis),Uncia_carinata)),Balaena_lagopus),Scaphiophryne_brongersmai),((((Bombycilla_manul,(Pelodiscus_novaeangliae,Sterna_rusticolus)),Phrynohyas_carinatus),Leuciscus_fallax),((Grus_breitensteini,(Pusa_heliaca,Tadarida_jacksoni)),Motacilla_imperator)))),((((Aegialifes_arvensis,((Dipus_celer,Thecla_boyciana),Haliaetus_brandtii)),Syrrhaptes_coelestinus),(Chettussia_Jankowskii,Iomachus_atrigularis)),Monticola_tarandus)),((((((((((Acanthoscurria_stimsoni,Pandinus_leucophyllata),Chalcides_pugatshuki),Phrynops_canus),Theloderma_ferruginea),((((((Chrysemys_scalaris,Tetrao_heterolepidotus),(Cottus_viridescens,(((((Cyclagras_prominanus,Grampus_ion),Elseya_carinata),(Gambelia_cranwelli,Tamias_cliffordii)),Recurvirostra_atra),((Micropalama_agama,Rufibrenta_orientalis),Squaterola_opimus)))),Ursus_albopillosum),Scincus_cinereus),(Podoces_avosetta,Thamnophis_caerulea)),Ursus_limosa)),(Chelodina_vastus,((Cinclus_communis,Phasianus_montela),(Gecarcinus_caudata,Phrynocephalus_jaspidea)))),Holodactylus_microlepis),((((((Bombycilla_pholeter,Scolopax_corone),(((((Lamprolepis_ladogensis,Lepidobatrachus_stejnegeri),Lystrophis_bairdii),Margaritifera_subruficollis),crecca_grunniens),Neolycaena_griseus)),Pseudemys_nivalis),((Kinixys_monachus,Osteopilus_hilarii),Phyllopneuste_citrsola)),Scaphiopus_sibirica),Otocoris_dignus)),((Fregilegus_atthis,Pelomedusa_calamita),Vipera_grus)),Macrorhamphus_occitanus)),(((Anthropoides_rufus,Riparia_hodgsoni),(Leuciscus_tarandus,Philothamnus_parreyssi)),((Melanocorypha_cristatellus,Plethodon_rosea),Ninox_imperator))),Alectoris_scabra),(Eulabeia_coturnix,Nhandu_cristatella)),((Ovis_ameiva,Trapelus_sauromates),(Phormictopus_monachus,Rissa_marinus))),Citellus_maritimus),(Capra_diadema,Streptopelia_nigriceps)),Monachus_shadini),Neophron_leucomelas),Varanus_davidiana),Uncia_emilia),(Limnodromus_decor,Tamias_graeca)),Scaphiophryne_nigropalmatus),Aplopeltura_squaterola),Grampus_sinensis),(((Acanthogonatus_brandtii,Eudrornias_mackloti),(((Amphiuma_viridescens,Eryx_tigrinus),Tringa_argali),Prunella_pachypus)),Athene_cliffordii)),(Lepus_pygargus,Lobipes_maldivarum)),(Cynops_gibbosus,((Liasis_aristotelis,Tadorna_leucogaster),(Pyxicephalus_argentatus,Sus_karelini)))),Liasis_undulata)),((((((((((((((((((((((((Accipiter_scripta,Erpeton_albopillosum),Pachydactylus_ferox),Squaterola_leucoptera),(Alcedo_classicus,((Cervus_enhydris,Middendorffinaia_griseus),Neophron_adspersus))),Lasiodora_bengkuluensis),(Cardiocranius_sieboldii,Pterinochilus_floridana)),(((((((Acipenser_vegans,Sturnus_ferina),Aix_helvetica),((Gambelia_cristatellus,(Leptopelis_ichthyaetus,Oceanodroma_rudicolis)),Theloderma_boyciana)),Scaphiopus_cherrug),(Bradypterus_reticulatus,Fregilegus_tenuirostris)),((((((((Almo_collaris,Natriciteres_corticale),((Arenaria_doctus,crecca_purpurascens),Balaena_maritimus)),((((((Argynnis_vipio,Osteopilus_novaeguineae),Synthliboramphus_diffidens),(Citharacanthus_melanoleucus,(Pyxicephalus_nivalis,Uroplatus_ussuriensis))),Synthliboramphus_colombianus),Rhacophorus_himalayensis),((Eudramias_dominicus,(Geochelone_pendulinus,Ophisops_smithii)),Picus_cyanochloris))),Bombina_australis),((Cottus_albertisii,Phrynosoma_cancerides),Oligodon_barbata)),(((((Bubulcus_scabra,Moschus_sphenocercus),Netta_spaldingi),(Otis_nebrius,Pterocles_erythronotus)),Monachus_krueperi),Scaphiophryne_quadriocellata)),Kinixys_vegans),Ardea_deserti)),Lutra_fiber)),Ptychozoon_ameiva),Vulpes_pulchra),((((Ambystoma_exquisita,(Ambystoma_leucomystax,(Chrysopelea_radiata,Tamias_prasina))),Hadogenes_fallax),Ortigometra_aceras),(((Basiliscus_fluviatilis,Middendorffinaia_monorhis),(Hottentotta_climacophora,Pachydactylus_nelsonii)),Melanocorypha_azureus))),(((((((Aegialifes_squamatus,Salvelinus_spaldingi),Eudramias_isabellina),Ethmostigmus_jaculus),((Bubulcus_variabilis,Dafila_parreyssi),Kinosternon_fuliginosus)),((Balaena_colchicus,Enhudra_ocellatus),(Basiliscus_rutilans,Xenophrys_crucigera))),((((((((Alcedo_coelestinus,Chlamydosaurus_leiosoma),Squaterola_dione),Mesoplodon_isabellina),Phelsuma_epops),Pusa_piscator),Alectoris_monacha),Buthacus_fuliginosus),(Brachyramphus_ochropus,Sericinus_angulifer))),Falcipennis_cavirostris)),(Megophrys_jubata,Tursiops_boulengeri)),Oenanthe_graeca),Nemachilus_laevis),((((Ahaetulla_leucoryphus,(Gekko_floridana,Turdus_schneideri)),Anthropoides_weberi),Phelsuma_ignicapillus),Salmo_rupestris)),Tringa_nigra),Eubalaena_schrencki),Furcifer_glutinosus),Bubulcus_canagica),(Heterodon_laevis,((Ortigometra_armata,Otocoris_rubicola),Uroplatus_perdix))),((Bombina_marmoratus,Parnassius_sujfunensis),Phrynocephalus_dennysii)),Netta_australis),Ninox_hypoleucus),Homopholis_hyemalis)),Agama_melanoleucus),(Allactaga_mitratus,((((((((Aphonopelma_rudicolis,(Otocoris_middendorffi,Sterna_gebleri)),(Charadrius_vermiculatus,((Chen_virgo,Cinclus_montela),Liasis_caudatus))),(Colaeus_exanthematicus,(Tadarida_aureostriata,Triturus_tentaculatum))),Grammostola_serpentina),Salvelinus_avinivi),Polypedates_cygnus),Ptyodactylus_temminckii),Pseudorca_rudicolis))),((((((((Alpes_gobio,((((Chlidonias_atrigularis,Pelusios_medirostris),Hemitheconyx_undulata),Pica_breitensteini),(Eirenis_clypeata,Odobenus_nyroca))),(Aplopeltura_pallidus,(Phyllopneuste_hungaricus,Pituophis_rufodorsata))),(Hyla_longicollis,Synthliboramphus_Bernicla)),Psammophis_quinquestriatus),((Gekko_paradoxus,Riparia_chamaeleontinus),Haliaetus_leporosum)),Oenanthe_cepediana),crecca_colombianus),Anthropoidae_cinclus)),(Phrynocephalus_meles,Sphenops_leucogeranus)),Eremophila_undulata),Nyctixalus_taeniura),Ortigometra_vastus),(Aegialites_merganser,(Budytes_helvetica,Hirundo_daurica))),Grampus_nyroca),Dyscophus_zagrosensis),((((((((((Acanthogonatus_lesueurii,Pyrrhocorax_grossmani),Corytophanes_erythronotus),(Eschrichtius_thibetanus,Pseudemys_monoceros)),(Chettussia_eulophotes,Enhudra_erythropus)),(Bombus_rupestris,Procellaria_molurus)),(Alaus_smaragdina,Marmota_soloensis)),Dipus_taxus),Coleonyx_ruthveni),Sphenurus_rufina),Rhesus_adamsii)),((((((((((((((((((((((((((((((((Acanthogonatus_adamsii,((Apodora_scripta,((Corallus_porphyrio,Saxicola_leucocephala),(Gyps_emarginatus,(Lepus_vitulina,Ptyodactylus_marinus)))),(Salvelinus_nasuta,Scaphiopus_laticauda))),(Grus_interpres,Rhabdophis_trigonopodus)),((Clemmys_subglobosa,(Coenobita_boa,Erpeton_ion)),Motacilla_sibiricus)),Damon_breitensteini),((Arctomys_perrotetii,(Atrophaneura_caudata,Coregonus_merganser)),Neophron_peregusna)),(Anas_leucogaster,Eublepharis_fuscatus)),(((Avicularia_pugnax,(Cyriopagopus_versicolor,Varanus_subniger)),(Boiga_middendorffi,Phelsuma_brachydactyla)),Lyrurus_unicus)),((Canis_collybitus,Pelusios_caryocatactes),Pachydactylus_caryocatactes)),Spalerosophis_bairdii),Nipponia_maculatum),Vormela_fimbriatus),((((((((Alaus_bukhunensis,(Circaetus_geniculata,Morelia_sieboldii)),Petrocincla_intermedia),(Hemiscorpius_australis,(Ketupa_saxatilis,Rhacophorus_lineatus))),Teratolepis_rudicolis),Egretta_rupestris),((((((Androctonus_uluguruensis,Kassina_albertisii),Eunectes_scrofa),Ketupa_chrysargos),(Citellus_garullus,(Laudakia_perdix,(Numenius_martensi,(Tadarida_adspersus,Tadarida_cyanogenys))))),(Ctenotus_manul,(Net_albatrus,Python_cinclus))),Clemmys_homeana)),(Clemmys_querquedula,(Parnassius_armeniacus,Upupa_parahybana))),(((Cinclus_fallax,Oenanthe_fasciolata),Ctenosaura_chukar),Phelsuma_longicollis))),(((Apodora_erythrogastra,(Notophthalmus_bairdi,(Rangifer_chrysaetus,Syrrhaptes_gigas))),((Cardiocranius_galeatus,Petrocincla_timidus),Querquedula_lutra)),Cyclemys_pusilla)),(((Acanthoscurria_holbrooki,(((((Accipiter_erythropus,((Agama_caeruleus,Bos_nebrius),Hemiscorpius_gregaria)),Limnaeus_erythronota),((Almo_madagascariensis,Felis_capra),Vulpanser_duplus)),(Phalacrocorax_ibera,Pseudorca_deremensis)),Pterinochilus_musicus)),(Almo_albicilla,((Anthropoidae_pulchripes,Leptobrachium_rufina),((Hydrochelidon_veredus,Picus_sujfunensis),Nerodia_rufodorsata)))),(Netta_kingii,Theloderma_scripta))),Odonthurus_australis),((Bombus_agama,Kassina_aeruginosus),(Erpeton_percnopterus,Phormictopus_virgo))),Falcipennis_septentrionalis),(Amphiuma_mlokosiewiczi,Chamaeleo_completus)),Felis_rostratus),(Carabus_japonica,Equus_lavaretus)),(Chlamydotis_taczanowskius,Thymallus_maculatum)),Lycodon_iguana),Platalea_brevipes),(((((((Balaena_imperator,Gavia_teniotis),Cyriopagopus_duplex),Pareas_vittatus),Phyllopneuste_bairdi),Chlamydosaurus_bairdi),Zosterops_triangulum),(Moschus_unicus,Telescopus_prasina))),Petrocincla_pygargus),Bradypterus_interiorata),(((Alpes_schneideri,((Boa_bairdi,Glareola_oenanthe),((Chamaeleo_boa,Saga_moschiferus),(Mergus_marmorata,Micropalama_hypomelus)))),Nemachilus_salei),Streptopelia_arcticus)),Anas_mystaceus),Pogona_caudolineatus),(Ctenosaura_bengkuluensis,Notophthalmus_gobio)),(((((Acanthosaura_rudicolis,(((((((((((((((Aix_constricticollis,Liasis_iankowskii),Asthenodipsas_meermani),(((((((((Antilope_caesius,(Porphyrio_leiosoma,Selenocosmia_vegans)),(Hottentotta_coelestis,Salamandra_caucasicus)),Oceanodroma_sauritus),Lepus_salvator),((Chelodina_scabra,Rhamphiophis_metallica),((Chlamydosaurus_jaculus,Hemiscorpius_multituberculatus),Thecla_floridana))),Eudrornias_saiga),Aythia_scalaris),Phrynomerus_ladogensis),(Crotaphytus_clinatus,Neolycaena_albocinctus))),(Amphiuma_pulchripes,(((Haliaetus_angulifer,Scolopax_vitticeps),Phoca_cenchria),Odobenus_nigrolineatus))),Panthera_chrysaetos),(Cuculus_aeruginosus,Gekko_prominanus)),Aythya_iguana),Kaloula_maculatum),Remiz_savignii),Sternotherus_doriae),(((Falco_pugnax,Lamprolepis_savignii),(Fuligula_cristatellus,Saiga_perrotetii)),Grus_mystaceus)),((Parus_aceras,Salmo_lasiopterus),Pelodytes_pardus)),Rhacodactylus_celer),Tringa_cyanea),Dendrelaphis_getula)),(Lanius_ovata,(Oxyura_cyanea,Phrynocephalus_uluguruensis))),(Dyscophus_venulosa,(Macrorhamphus_macularius,Mergus_docilis))),Tursiops_ornata),Psammophis_lividum)),Oxyura_smaragdina)),(Milvus_eburnea,Tryngites_subminiatus)),Aegypius_hirundo),((((((((Bradyporus_sieboldii,Eutamias_bifasciatus),Scorpio_oxycephalum),(Hyla_aristotelis,Lagenorhynchus_barbata)),Camptoloma_equestris),Xenopeltis_perdix),Uroplatus_wumuzusume),Pareas_gregarius),Sphenops_eximia)),(((Eulabeia_guentheri,((Laudakia_standingii,Turdus_tinnunculus),(Mergus_schreibersi,Pleurodeles_taeniura))),Phrynomerus_amboinensis),Lutra_orientalis)),Phrynocephalus_scripta),Coturnix_vulpes),(((((Brachypelma_ignicapillus,(Epipedobates_alpina,Lanius_sanguinolentus)),Fuligula_botnica),Eutamias_hypoleucos),Megaloperdix_fragrans),(((Coleonyx_vulpes,(Cypselus_rosmarus,Lamprophis_mongolica)),(Haliaeetus_ladogensis,(Hirundo_gecko,Lasiodora_aestivus))),(Seokia_livia,Sphenops_aceras)))),Casarca_ruthveni),(((((((((Acanthis_bellii,(Butastur_glacialis,Porphyrio_grossmani)),Buthacus_variabilis),Eryx_bicinctores),(Phrynops_communis,Vormela_cranwelli)),(((Basiliscus_coturnix,Marmota_taezanowskyi),Monodon_caudatus),(Hyperoodon_atriceps,Mabuya_marinus))),Mergus_leucopsis),((Mareca_novaeangliae,Paraphysa_mirabilis),(Pleurodeles_troglodytes,Ursus_scripta))),Accipiter_laticauda),((((Gonyosoma_lesueurii,Moschus_zenobia),((Nyctixalus_flavigularis,Rhynchaspis_atra),Ptychozoon_chuatsi)),Pelusios_mlokosiewiczi),Spalerosophis_holbrooki))));' +s2='((((Abantias_mirabilis,((Chlidonias_emilia,Iguana_yeltoniensis),(Podoces_hemilasius,Ameiva_erythronotus))),((Chelus_lepturus,((Sericinus_guangxiensis,Acanthosaura_oenanthe),(((Capella_melonotis,Meles_angustirostris),Ingerophrynus_fernandi),Chlamydotis_euptilura))),(Remiz_montela,((((((Ameiva_pica,(((((Cygnus_chukar,Rhynchaspis_insignis),Erpeton_alterna),Lasiodora_minor),Trapelus_glacialis),Hyla_jaculus)),((((Dipsosaurus_gregaria,((Hottentotta_homeana,Scaphiopus_mystaceus),(Procellaria_platycephala,Underwoodisaurus_stellatum))),Ptyodactylus_cyanochloris),((Hydrochelidon_Jankowskii,Tadorna_monilis),Meles_pardalis)),Micropalama_deminutus)),(Recurvirostra_mitratus,sibiricus_cliffordii)),(Erpeton_sp,Salvelinus_spinifera)),(((Chamaeleo_colubrinus,(Chrysemys_fernandi,Norops_alpinus)),Hyla_aureola),Ketupa_cyanea)),Asthenodipsas_kurilensis)))),(((((Hadrurus_trianguligerus,((crecca_acanthinura,Eryx_sauromates),((Pogona_tricolor,Rosalia_veredus),Turdus_lividum))),(((Haliaeetus_hyperboreus,Bombyx_bairdii),(Physignathus_fragrans,(Philothamnus_bairdi,Anthropoidae_carnivorus))),(Phalacrocorax_longipennis,Calidris_eulophotes))),((Gekko_hypomelus,Pagophila_personata),Circus_pallasii)),(Psalmopoeus_veredus,((Turdus_bicoloratum,Nemachilus_breitensteini),(Chrysopelea_rosmarus,Erpeton_calamita)))),((((Spalax_corsac,(((Pyrrhocorax_siebenrocki,Pseudemys_pygmaeus),(Aix_prasina,(Aix_pugatshuki,Lepidobatrachus_plumifrons))),(Dendrelaphis_climacophora,Saxicola_caesius))),((Chalcides_cyanochloris,((Cynops_grus,((Neolycaena_virgo,Thamnophis_diadema),(Python_haliaetus,Tryngites_boschas))),Phelsuma_helena)),((Plegadis_sanguinolentus,Argynnis_equestris),Coenobita_pulchra))),((((((Lamprophis_teniotis,Pelodytes_solitaria),(Laudakia_parahybana,Limnodromus_glottis)),(((Pelusios_interpres,(Sus_cyanea,sibiricus_multifasciata)),Rhamphiophis_means),Telescopus_alpinus)),Net_major),(Lampropeltis_leucoptera,(Alpes_ibis,Lystrophis_murinus))),(((Apalone_heudei,Arctomys_coloratovillosum),Salvelinus_fasciata),(Caiman_fulvus,Chondropython_calligaster)))),(((((Gyps_pusilla,(Pandinus_meermani,Tursiops_lopatini)),Passer_gregarius),(((Candoia_sujfunensis,Vulpes_fusca),Fregilegus_cynodon),((Otis_grossmani,Notophthalmus_krueperi),Petrocincla_keyzerlingii))),Megophrys_cancerides),Carabus_manul)))),(((((((((((((Abantias_situla,Middendorffinaia_rufinus),(((Acanthis_major,(Selenocosmia_completus,Syrrhaptes_kopsteini)),Seokia_savignii),Bradyporus_miliaris)),(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Acanthis_acanthinura,Balaenoptera_unicus),Paraphysa_canagica),Eumeces_aegyptia),Balaenoptera_nigra),Phasianus_orientalis),(Amphiuma_communis,Teratolepis_nasuta)),(Bombycilla_citreola,Rhesus_gigas)),(Chettussia_medici,Rhacophorus_erythropus)),Butastur_helena),Paramesotriton_pugatshuki),Philacte_dominicus),(Elaphe_lineatus,Salamandra_dentata)),Sturnus_shadini),(((((((Acanthoscurria_graculus,Sorex_scincoides),Rhamphiophis_variabilis),Falco_gallinago),(Enhydris_caucasicus,(Iomachus_arseniavi,Porzana_graeca))),Chondropython_lutris),Accipiter_borealis),((Aegialifes_pictus,Podoces_botnica),(((((Archispirostreptus_javanica,Squaterola_pulchripes),Scolopendra_teguixin),Mergus_purpurascens),Tetraogallus_Bernicla),Natriciteres_clarus)))),(Antaresia_argentatus,(((((((((Cygnopsis_gecko,(Natriciteres_vulpes,Pelodiscus_pardus)),(Falcipennis_teguixin,Fulica_dentatus)),Gonyosoma_geniculata),Sphenops_rudicolis),Rhynchaspis_turneri),Dipsosaurus_uluguruensis),Tropidurus_striatus),Megaptera_tigrinus),Sorex_brongersmai))),((Chlamydosaurus_odoratus,Eulabeia_occitanus),Ctenosaura_rufus)),(((((((((((((((((((((((((((((((((((((((((((((((Acanthis_boa,((((Callipogon_tigris,Haplopelma_hassanica),Tetrao_carbonaria),Eirenis_filipjevi),Oenanthe_subcinctus)),(((((((((Acanthoscurria_hipposideros,((((((((((((((((((((((((((((((((((((((((((((((Accipiter_elegans,((((((((Dipsosaurus_politus,Hadogenes_cianeus),Mochlus_elegans),Minipterus_leucogeranus),Monodon_fulvus),Lepus_exanthematicus),Fulica_insignis),Marmota_avinivi),Gekko_triangulum)),Cypselus_comicus),Acheron_mandarina),(Ambystoma_glutinosus,(Leptobrachium_bukhunensis,Lepus_dignus))),(Avicularia_leucomystax,Eryx_ferina)),(Chondropython_stellio,(Haliaeetus_rudicolis,Iomachus_perdix))),Philothamnus_jaculus),Halichoerus_hipposideros),Lycaenopsis_grossmani),Phrynocephalus_chuatsi),((Ctenotus_tataricus,Phalacrocorax_niloticus),Tadarida_barbata)),Pandinus_rubicola),Tetrao_dendrophila),(((((((Aphonopelma_compactus,Iguana_flavolineata),Gongylophis_taezanowskyi),(Eremophila_cyanogenys,Petrocincla_javanica)),(Balaena_tarda,Xenochrophis_clericalis)),(((((((Callipogon_zenobia,(Ethmostigmus_maihensis,Milvus_dominus)),(Melanocorypha_vastus,Ptychozoon_cambridgei)),(Ctenotus_yeltoniensis,Dendrelaphis_vipio)),Chamaeleo_albertisii),Phrynocephalus_felderi),Oligodon_melanoleucus),Ophisops_heterolepidotus)),Cyriopagopus_nupta),Burhinus_uluguruensis)),Corallus_hodgsoni),(Allactaga_mexicana,Desnana_schokari)),(((Canis_siebenrocki,Strepsilas_rostratus),(Ceratophrys_kazanakowi,Saxicola_cynodon)),Phoca_taxus)),(((((((((Aix_ammon,Platemys_molurus),(Circaetus_venulosa,Teratolepis_monachus)),Psammophis_pulchripes),Glareola_hilarii),Laudakia_albocinctus),Epicrates_weliczkowskii),Rhynchophis_atthis),(Asthenodipsas_battersbyi,Corvus_clypeata)),(((Anas_japonica,((((Calidris_microlepis,(Liasis_comicus,Netta_iankowskii)),(((Chettussia_weberi,Lasiodora_meles),Xenopeltis_regius),Limnodromus_calidris)),(Pyxicephalus_ocellatus,Trachemys_vegans)),Cottus_quadriocellata)),Zosterops_giganteus),Hadrurus_vulpes))),Dendrelaphis_cinereus),Phylloscopus_stagnalis),(((((((Aphonopelma_aspera,Mogera_corsac),((Bombyx_ridibundus,Candoia_zenobia),(Cyriopagopus_rusticolus,Micropalama_naumanni))),Spermophilus_fragrans),(Phrynosoma_australis,Syrrhaptes_monoceros)),(Onychodactylus_maculata,(Pandion_odoratus,Trionyx_graculus))),Fuligula_apus),((Bos_castus,(Chalcides_exquisita,Salmo_albicilla)),(Buthacus_vastus,((Camptoloma_personata,((Chrttusia_maihensis,Pyrgilauda_pica),Corallus_argentatus)),Nemachilus_asperum))))),(Alauda_wislizeni,Mylopharyngodon_paradisi)),(((((((Arctomys_rubida,Chamaeleo_microlepis),Tadarida_dispar),Balaenoptera_leucomelas),(Holaspis_griseus,Parus_modestus)),Tadarida_sinensis),Cyclemys_glaucescens),((Halichoerus_altaica,Ketupa_ornata),(Laudakia_multifasciata,Upupa_auriculatus)))),(Almo_leucogaster,Anolis_emarginatus)),(Telescopus_dexter,Vipera_subcinctus)),Tadorna_albirostris),Tiliqua_vastus),((Alauda_lutra,Elaphe_guangxiensis),((Anthropoidae_arcticus,Columba_emilia),Thecla_pendulinus))),((((Bradypodion_dennysii,Butastur_monorhis),Elaphe_cristatus),Ziphius_auratus),Moschus_crispus)),((Anthropoidae_wumuzusume,Boiga_scripta),((((((Cervus_filipjevi,Rhacophorus_grus),Cynops_intermedia),((Dryobates_tatarica,Totanus_caudata),Tupinambus_middendorffi)),Erpeton_mutabilis),Rhamphiophis_porphyrio),Xenophrys_pallidus))),((((((((((((((((((((((((Acheron_mugodjaricus,((((Archispirostreptus_diadema,(Bombus_salei,Coregonus_cristatellus)),Lystrophis_opimus),Pelusios_himantopus),Hemitheconyx_eremita)),(Oedura_politus,Tylototriton_salamandra)),Elseya_melanuroides),Chamaeleo_climacophora),Zosterops_nelsonii),Corytophanes_leschenaultii),((((((((Almo_saiga,(Bombycilla_maurus,Cyriopagopus_edulis)),Buthus_xanthocheilus),(((((Brachypelma_sieboldii,Chondropython_soloensis),(((Chrttusia_zagrosensis,(Eudrornias_doctus,Nhandu_oenanthe)),Furcifer_verrucosus),Mabuya_pelagicus)),((((Cyclemys_mlokosiewiczi,Vanellus_bedriagai),(Limnodromus_tanganicus,Tamias_tinctorius)),Uroplatus_madagascariensis),(Rissa_oedicnemus,Sorex_heterolepidotus))),(Gypaetus_bonasus,Mogera_krueperi)),Limosa_subrufa)),Coenobita_guttifer),(Fuligula_jaspidea,Limnodromus_taczanowskius)),(Coleonyx_macularius,Sericinus_radiata)),Cyclemys_ceterus),Elaphe_ochropus)),((((((Ameiva_cornix,Zosterops_altaica),Ctenosaura_mexicanum),(((((Aphonopelma_moschata,Hottentotta_decor),(Kinixys_nasuta,Xenochrophis_irregularis)),Pusa_tetrix),Cyriopagopus_leuconotus),(Ciconia_bairdii,Epicrates_rufus))),Argynnis_serpentina),Motacilla_classicus),(Eumeces_vulgaris,Ninox_peregrinus))),Platalea_caelebs),Rufibrenta_botnica),(Enhudra_prasina,Nucifraga_pedo)),((Chrysopelea_rostratus,Synthliboramphus_madagascariensis),crecca_ochropus)),Hemiscorpius_fallax),(Lepidobatrachus_rusticolus,Mabuya_totanus)),Gyps_caudolineatus),Platalea_guttata),((Lasiodora_triangulum,Minipterus_uncia),Osteopilus_torquata)),(((((Alloporus_latiscutatus,Eschrichtius_schneideri),(Tetraogallus_lutra,Tiliqua_carbonaria)),Cottus_terrestris),(Fulica_fuellebornii,Homopholis_cingulata)),Ceratophrys_turtur)),((Corvus_purpurascens,((Megophrys_savignii,Strepsilas_noctua),Micropalama_graculus)),Odobenus_blakistoni)),Sus_anatina),((Ameiva_chinensis,Larus_cioides),Sturnus_eximia)),Upupa_avosetta),Synthliboramphus_hendricksoni),((((Eumeces_rufus,Syrrhaptes_ornata),Hysterocrates_squamatus),Plethodon_meermani),Gecarcinus_indica))),(Gekko_galeatus,Gerrhosaurus_melanostictus)),Bos_sanguinolentus),Streptopelia_chuatsi),(Allactaga_caryocatactes,Eucratoscelus_sauromates)),Sterna_acuta),Castor_fimbriatus),(Eudramias_haliaetus,Tylototriton_casualis)),((((((Antilope_floridana,Capreolus_griseus),Tupinambus_gregarius),Siniperca_fimbriatus),((Certhia_jacksoni,Scolopax_insignis),(Lycodon_fuellebornii,(Mabuya_lividum,Pelusios_nivalis)))),Capeila_Bernicla),((((((Boiga_flavomaculatus,Pleurodeles_rufodorsata),Phasianus_taxus),(((((Budytes_galactonotus,Paraphysa_murinus),Testudo_maldivarum),((Eudrornias_guineti,((Hirundo_schokari,Tetraogallus_geniculata),Mochlus_sagrei)),Lepus_atthis)),((((((Chelus_bifasciatus,(Cygnus_aceras,Pseudemys_dendrophila)),Crotaphytus_botnica),(Phrynohyas_mystacinus,Querquedula_moschiferus)),Underwoodisaurus_crucigera),(Chelydra_purpurascens,Ruticilla_collaris)),Chlidonias_arizonensis)),Lamprophis_tatarica)),Kassina_czerskii),(Hydrosaurus_chamaeleontinus,Turdus_laevis)),(Bombina_fissipes,Larus_zonata)))),(Chelus_wogura,Tryngites_fluviatilis)),Hydrosaurus_zonata),Cottus_vastus),(((((Aphonopelma_argentatus,Ephibolus_aegagrus),((Gonyosoma_vertebralis,(((Iomachus_pictus,Saxicola_albicilla),Spalax_brevirostris),Ursus_vipio)),Mustela_rhymnus)),Pyxicephalus_albirostris),(Homopholis_eximia,Philacte_vulpes)),Melanocorypha_giganteus)),((((Alpes_maihensis,(Aythya_montela,Kinixys_similis)),(Chlidonias_rutilans,Phrynocephalus_subrufa)),(Eirenis_smithii,Ophisops_guttifer)),Pituophis_deminutus)),Pyrgilauda_hemilasius),Eucratoscelus_musicus)),Rhombomys_squaterola),(Acanthoscurria_trigonopodus,Hyla_deserti)),((Ardea_torquata,Thamnophis_sibiricus),(Capella_tolai,Heteroscodra_valliceps))),Rissa_bimaculata),Dendrelaphis_horridum),Scaphiophryne_nasicus),((((((((Citellus_rubida,crecca_hemilasius),(Gazella_dactylisonans,((Leiopython_livia,Paraphysa_fuliginosus),Tetrao_alcinous))),Squaterola_bengkuluensis),(Neolycaena_riparia,Pedostibes_infrafrenata)),Salamandra_korschun),(Limnodromus_milii,Motacilla_sepsoides)),(Corallus_aureola,Iguana_mlokosiewiczi)),Pyrgilauda_leucogeranus)),(Allactaga_medirostris,((Boiga_plathyrhychos,(Eudrornias_aegyptia,Ortigometra_ferina)),Kaloula_sujfunensis)))),Squaterola_unicolor),(Procellaria_atriceps,Python_melleri)),((((Aix_americanus,(Eudrornias_subcinctus,Hydrosaurus_breitensteini)),Tylototriton_diffidens),(Ephibolus_standingii,Odonthurus_sanguinolentus)),Bradyporus_docilis)),(((Alauda_brachydactyla,Homopholis_taczanowskius),(Hysterocrates_leucoptera,Phrynosoma_caerulea)),Sturnus_glacialis)),(((Buteo_tentaculatum,Dendrelaphis_mlokosiewiczi),Saxicola_hirundo),Pusa_brevipes)),(((((((Anodonta_hongkongensis,Terpsihone_diadema),Odobenus_situla),Oxyura_caucasicus),Corallus_caudata),(((Dryobates_completus,(Gazella_docilis,Hottentotta_caryocatactes)),Homopholis_purpurascens),Gonyosoma_valliceps)),(Anolis_chinensis,Vormela_sp)),Psalmopoeus_mysticetus)),Rissa_avinivi),Brachyramphus_lavaretus),Gazella_gibbosus),Pyrrhocorax_marinus),Bradypodion_anatina),Argynnis_cranwelli),Acanthis_calligaster),(Eubalaena_sanguinolentus,((Falco_bedriagai,Monachus_oedicnemus),Vanellus_clericalis))),(((Capella_macularius,(Nyctixalus_leucopsis,Phormictopus_aleutica)),Pachytriton_turtor),Lamprophis_glareola)),(Bradypodion_sibilans,((((Chlamydosaurus_plathyrhychos,Lyrurus_bicinctores),Phoca_ichthyaetus),(Gyps_deminutus,Hysterocrates_proteus)),Poephagus_belliana))),Petrocincla_lagopus),Apodora_stylifer),Bradyporus_fulvus),Spalax_avosetta),Syrrhaptes_vanellus),Platalea_vitulina),(Anas_equestris,Xenophrys_jaculus)),Phyllopneuste_calyptratus),((Chrysopelea_garulla,sibiricus_temminckii),Nipponia_bengkuluensis)),(((Certhia_ibera,(Rhodostethia_naumanni,Triturus_triangulum)),Rhodostethia_avocetta),Ctenotus_sauritus)),Tursiops_sp),((Anodonta_cristatus,Bradypodion_dispar),(Leiopython_kraepelini,Nerodia_hasselquistii))),Asthenodipsas_weberi),Capella_indica),Margaritifera_vermiculatus),Aythya_lutris),(Pareas_galeatus,Porphyrio_marmoratus)),(Androctonus_interiorata,Lepus_auriculatus)),((Hysterocrates_altaica,Plethodon_davidiana),Ursus_leporosum)),Acanthosaura_papuana),(((Acheron_taczanowskius,(Mergus_mlokosiewiczi,Rhesus_milii)),Underwoodisaurus_onocrotalus),Siniperca_opimus)),((Arenaria_parvus,Net_albigula),Querquedula_coturnix)),Anthropoidae_pallasii),Remiz_buccata),(((((Corvus_collaris,(Holaspis_gebleri,Sceloporus_punctatus)),Saiga_chrysaetos),Porphyrio_monilis),Parabuthus_physalus),Rufibrenta_subrubrum)),Lasiodora_guttifer),(((Acanthoscurria_caudicinctus,(((((Apalone_caeruleus,Nyctixalus_ussuriensis),(Paradoxornis_prasina,Ruticilla_Jankowskii)),Pituophis_aegyptia),Leiurus_sanguinolentus),Pogona_arenarius)),Mochlus_leucoryphus),Rhacodactylus_spinifera)),Anodonta_minutus),(((((((((((((Acanthoceros_enhydris,Carabus_tinnunculus),Acipenser_pedo),((((((((((((((((Acanthogonatus_wumuzusume,Grampus_ammon),Theloderma_salei),Ursus_adamsii),Vulpanser_dorsalis),(Anas_rufina,Selenocosmia_calligaster)),(((Bubulcus_clypeatus,Lutra_cyanus),Eudramias_paradisi),(Dasypeltis_getula,((Pelusios_proteus,Synthliboramphus_oenanthe),Xenochrophis_baeri)))),Circus_korschun),Rhacophorus_imperator),Pachytriton_franckii),(((((((((((Aegialifes_mlokosiewiczi,((((Amphiuma_cranwelli,Eucratoscelus_fernandi),Castor_nelsonii),Pagophila_parvus),Rissa_macularius)),Carabus_vastus),Cygnopsis_ibera),(Camptoloma_taeniura,Circaetus_odoratus)),Hottentotta_sebae),Glareola_perdix),Eucratoscelus_peregrinus),Eubalaena_eremita),Gazella_montela),Apodora_bedriagai),((((Allactaga_glaucescens,(Capreolus_walti,Emberiza_xanthocheilus)),(Bradypodion_barroni,(Pelodytes_insignis,Physignathus_hyemalis))),Sceloporus_cancerides),Pterinochilus_pallidus))),Spalerosophis_fasciolata),Basiliscus_nivicola),Mabuya_modestus),Chrysemys_gecko),Balaenoptera_marcianus),Philothamnus_melanostictus)),(Grus_fulvus,((Nyctixalus_oenanthe,Saga_cancerides),Passer_carolinensis))),(((Alaus_semipalmatus,((((Balaena_ferina,Pedostibes_smaragdina),Paramesotriton_aceras),Lampropeltis_cyanogaster),Ketupa_mutabilis)),Osteopilus_moschata),((((Alloporus_collybitus,(Lamprophis_manul,Lycaenopsis_kopsteini)),Hydrochelidon_lividum),(Anodonta_deminutus,Antaresia_schneideri)),(((Branta_casualis,Pareas_subniger),Chondropython_gecko),(((Branta_erythronota,Sturnus_laevis),Grampus_cachinans),Chen_serricollis))))),(((((((((((((((Agama_vertebralis,Kinosternon_grandis),(Mylopharyngodon_glottis,Tetrao_doctus)),Latastia_chuatsi),Avicularia_insularis),(((Coenobita_grossmani,Cuculus_wislizeni),Larus_naumanni),Oligodon_insularis)),(Camptoloma_carnivorus,((Chrysemys_maldivarum,(Falco_dominicus,(Geochelone_collaris,Ziphius_minor))),Perdix_virgo))),((((((((((((((((((((((Alectoris_coelestis,Eudramias_indica),Lyrurus_similis),Oceanodroma_chrysargos),Pseudemys_manul),Chelus_maritimus),Rhodostethia_giganteus),(Aythya_melonotis,(((Eryx_arvensis,Rhabdophis_calligaster),Halichoerus_xanthocheilus),Nipponia_tetrax))),Sus_tigrinus),(Ameiva_lutra,Gypaetus_oxycephalum)),Bombyx_sibilans),(Boiga_tricolor,Machetes_oxycephalum)),(Litoria_venulosa,Theloderma_coelestis)),(((Chrttusia_rhymnus,Nhandu_nivicola),Heteroscodra_fimbriatus),Pseudemys_galericulata)),(Brachypelma_clericalis,Nyctaalus_platyrhinos)),Philomachus_vanellus),Chelus_lineatus),Teratoscincus_tatarica),Sturnus_hungaricus),Pyrgilauda_kazanakowi),Citharacanthus_reticulatus),((Nemachilus_picta,Querquedula_amboinensis),Tupinambus_oenanthe)),((((((((Anodonta_corone,Cinclus_caudolineatus),Bombyx_korschun),(Madagascarophis_carbonaria,(Megaloperdix_sanguinolentus,Nyctixalus_flavirufa))),Enhudra_albocinctus),Perdix_paganus),(Phasianus_cristatella,Scolopax_sanguinolentus)),Neolycaena_carinatus),Aplopeltura_fasciata))),(((((Elaphe_acanthinura,Sphenops_zagrosensis),Tetraogallus_adamsii),Nemachilus_angustirostris),Scolopendra_nigrolineatus),((Hydrosaurus_meles,Philothamnus_sp),Mabuya_atthis))),(Alectoris_auriculatus,(Pterinochilus_saxatilis,Ptyodactylus_atrigularis))),Epicrates_variabilis),(Alaus_battersbyi,Archispirostreptus_viridis)),Grammostola_africanus),Balaenoptera_grossmani),Almo_classicus),Rissa_franckii)),(((((Allactaga_bengalensis,Trachemys_caeruleus),Anodonta_helvetica),Regulus_crispus),(Apus_zagrosensis,Phasianus_variabilis)),Amphiuma_tadorna)),Monodon_cingulata),Cuora_climacophora),Ruticilla_lehmanni),((Cyriopagopus_dennysii,crecca_guentheri),(((Lampropeltis_rudicolis,Lystrophis_interpres),Natriciteres_bukhunensis),Ptychozoon_franckii))),(Cyclagras_gobio,Marmota_lutris)),Avicularia_strepera))),Apalone_arseniavi),Tupinambus_mystaceus),Pelomedusa_albocinctus),((((((((((((((((((((((((((Allactaga_arcticus,Bufo_glareola),Sorex_angustirostris),Phalacrocorax_cliffordii),Leiopython_tenuirostris),Bombycilla_pyromelana),(Ctenotus_fuliginosus,(Cygnopsis_mystacinus,(Geochelone_stagnalis,(Otis_garmani,Vipera_perrotetii))))),Lobipes_tenuirostris),(((((((((Anthropoides_weliczkowskii,Streptopelia_rupestris),((((Bombina_middendorffi,Haplopelma_alcinous),Hadogenes_plumifrons),Psammophis_dactylisonans),(Oxyura_fiber,Recurvirostra_salvator))),Chettussia_vertebralis),(Chamaeleo_femoralis,Ptyodactylus_standingii)),Saxicola_helena),(((Eunectes_hasselquistii,Norops_aegagrus),Heterodon_bicoloratum),Nemachilus_pusilla)),(((Canis_tigrinus,Varanus_tatarica),Hemitheconyx_fasciolata),Megaloperdix_casualis)),(((Babycurus_agama,Epicrates_piscator),(((Buthacus_naumanni,Sterna_difficilis),Gonocephalus_pelagicus),Pelodiscus_leptochelis)),Bos_terrestris)),Thymallus_galactonotus)),((Bronchocela_dorsalis,Glareola_septentrionalis),Regulus_colubrinus)),Dyscophus_angustirostris),((Ceratophrys_pelagicus,Thymallus_argali),Emydura_melleri)),Damon_scrofa),Philomachus_cavimanus),(Haliaetus_constricticollis,Phrynocephalus_godlewskii)),Lyrurus_pardus),((Dafila_sirtalis,((((Hadogenes_alpina,Pseudemys_doctus),Limnaeus_edulis),Hysterocrates_brachydactyla),Mabuya_gemmicincta)),Trionyx_serricollis)),Bronchocela_mandarina),(Cyclagras_karelini,Phalaropus_tarda)),Apalone_anachoreta),Bufo_communis),Bronchocela_tatarica),(Balaenoptera_terrestris,Eudrornias_marcianus)),(((Argynnis_amboinensis,(Argynnis_krueperi,Mergus_dubius)),((((((Bombina_capra,Coleonyx_mandarina),Diomedea_himalayanus),Upupa_glottis),(Calidris_margaritifera,((Chrttusia_temminskii,Psalmopoeus_salvator),Sceloporus_medici))),Triturus_orientalis),Citellus_dahurica)),Saxicola_emarginatus)),Moschus_carolinensis),(Leptobrachium_glutinosus,Scincus_govinda)),Pica_blakistoni)),Falcipennis_africanus),(((Aegypius_ridibundus,((Allactaga_rubicola,(Emydura_emilia,Squaterola_gordoni)),Lobipes_mackloti)),(((((Alaus_arizonensis,(Lobipes_kuhli,Tadarida_semipalmatus)),(Calotes_blythi,Scaphiophryne_fernandi)),Rhynchaspis_bellii),((((((((Callipogon_ceterus,Coleonyx_martensi),Thamnophis_percnopterus),Fregilegus_collectivus),Vanellus_monoceros),Cyclemys_gregarius),Testudo_scalaris),Spermophilus_dulkeitiana),Hydrochelidon_fiber)),Anodonta_gratiosa)),Antilope_rufina)),Callipogon_deremensis),(((Apodora_guttata,Boa_physalus),(Turdus_mycterizans,Zosterops_terrestris)),Hadrurus_barbatus)),((Agama_mirabilis,Anolis_leucoptera),((Coturnix_quadrivirgata,Haplopelma_melonotis),Nipponia_bicinctores))),(Moschus_mysticetus,Telescopus_saxatilis)),Phalacrocorax_squamatus),Dipsosaurus_colubrinus),((Kinosternon_multifasciata,Sterna_tetrax),Rhodostethia_tataricus)),Butastur_rubida),Trachemys_grunniens),((Bombyx_gordoni,(Gallinago_gemmicincta,Trachemys_scabra)),((((Cuora_reinwardti,Gallinago_zagrosensis),Phalacrocorax_situla),Damon_radiata),Pelecanus_corone))),((((((((((((((((((((Acanthogonatus_sinensis,(Madagascarophis_mexicana,Osmoderma_getula)),Anthropoidae_conicus),Arctomys_ochropus),(Bombycilla_apollo,(Dyscophus_aureostriata,Elaphe_dione))),Phelsuma_troglodytes),((((((Bos_rapax,Falco_guangxiensis),Cervus_nigropalmatus),Lasiodora_tigrinus),Phyllopneuste_colchicus),Crotaphytus_interiorata),((Dipus_serpentina,Rhesus_standingii),Triturus_timidus))),Teratolepis_armata),(((((((((Ahaetulla_turtor,((Boa_ferrumequinum,Hirundo_borealis),Bronchocela_avocetta)),((((((((((((Apus_prominanus,(Leiolepis_turneri,Osmoderma_flava)),Rhacophorus_australis),(Lystrophis_canus,Neolycaena_subminiatus)),Poephagus_veredus),Sitta_mackloti),Burhinus_lehmanni),(Budytes_miliaris,(((Cuon_meermani,Holodactylus_plumipes),((Dipus_moschiferus,Sphenops_temminskii),Phalaropus_galeatus)),(Milvus_gibbosus,Sitta_ferox)))),Gerrhosaurus_chuatsi),((((((((Chelydra_vertebralis,Parnassius_longicollis),Euspiza_salamandra),Macrorhamphus_nigriceps),(Cuon_jaspidea,Opheodrys_leucoryphus)),Minipterus_buccata),Crotaphytus_major),Underwoodisaurus_hardwickii),((Pseudorca_monorhis,Tadarida_fusca),Vulpanser_chrysaetus))),Grus_dubius),(Carabus_teniotis,Ziphius_borealis)),Hydrochelidon_maurus)),Tursiops_nippon),Norops_lutris),Bradyporus_nigriceps),(((((Cervus_celeber,Hadrurus_placidus),Mustela_unicolor),(Desnana_schrencki,Limnaeus_tarda)),Oxyura_lehmanni),Phrynocephalus_himalayensis)),Fuligula_albicilla),Capeila_kingii),Vulpes_duplex)),((Anodonta_pica,((Cuculus_ibera,Cuora_elaphus),Ursus_aspera)),(((Emberiza_avosetta,Pituophis_lasiopterus),(Perdix_corticale,Uncia_hypomelus)),Gyps_oedicnemus))),(Capreolus_cianeus,(((Castor_rufina,((((Chettussia_tuberculosus,Eremophila_altaica),Rangifer_similis),Plegadis_eximia),(Gerrhosaurus_ussuriensis,(Philomachus_exquisita,Ptychozoon_lobatus)))),Pyrrhocorax_glottis),Certhia_irregularis))),(((((((((Actitis_geyri,(Eubalaena_lineatus,Psalmopoeus_bicoloratum)),Telescopus_alcinous),((((Chrysemys_enhydris,Emberiza_vulgaris),Xenopeltis_hemilasius),Phrynomerus_carinata),Mylopharyngodon_cornix)),sibiricus_cyanochloris),(Capra_pygmeus,Pelomedusa_bedriagai)),Castor_dahurica),((Bronchocela_alpinus,Chrttusia_pygmeus),Leiolepis_nupta)),Atrophaneura_albicilla),(Archispirostreptus_maurus,Phrynops_fuscatus))),(Chelydra_meermani,Circaetus_erythronotus)),(Eudrornias_semipalmatus,Pusa_notaeus)),Mylopharyngodon_argentatus),(Hirundo_leucorodia,Pituophis_oxycephalum)),Spizaetus_sanguinolentus),Dipus_catenifer),(Anas_maculatum,Heterodon_serricollis)),((Leptopelis_sphenocercus,Vipera_temminckii),Ninox_haliaetus)),Buthacus_musculus)),Cyclemys_turneri),(((Acanthosaura_eburnea,(((((((((((((Actitis_clypeatus,(((((((((((((((((Aegialifes_communis,Monticola_apollo),Callipogon_iankowskii),Balaena_crispus),(((((Anolis_sibirica,(Dahurinaia_ovata,Morelia_arenarius)),Bombina_hilarii),Recurvirostra_carbonaria),Prunella_mutabilis),Rhabdophis_comicus)),Pseudorca_gallicus),Paradoxornis_korschun),Bradypterus_intermedia),Colaeus_leptochelis),Tadarida_kraepelini),Tupinambus_ruficollis),((Balaenoptera_leucoryphus,(Calotes_pachypus,Monachus_erythropus)),(Fulica_leucoptera,((Hydrochelidon_irregularis,(Mochlus_kingii,Nerodia_tolai)),Lagenorhynchus_circia)))),((((Almo_leuconotus,(Balaena_geyri,((Burhinus_fernandi,Selenocosmia_nasuta),((Eutamias_occitanus,Lepus_heliaca),(Leiurus_infrafrenata,Pusa_epops))))),(Chrttusia_venulosa,Osmoderma_breitensteini)),Coenobita_hypomelus),Spalerosophis_gecko)),Chlamydosaurus_boulengeri),(Anthropoidae_scincus,Odobenus_epops)),(Chelydra_situla,Ctenosaura_tadorna)),Damon_rapax),Rangifer_dulkeitiana)),((Argynnis_cynodon,Glareola_vulgaris),Grus_alba)),Platemys_circia),(((Brachypelma_crassicauda,(((((Dendrelaphis_calamita,(Pareas_plathyrhychos,Streptopelia_armeniacus)),Nyctaalus_gebleri),Lampropeltis_clinatus),Podoces_subrufa),Himantopus_celeber)),Iguana_perdix),(Chelodina_canus,(Emydura_ochropus,sibiricus_porzana)))),Columba_hypoleucos),Gypaetus_hendersoni),(Lycaenopsis_godlewskii,Parabuthus_torquata)),Asthenodipsas_sphenocercus),Margaritifera_ferina),Pseudemys_clarus),(Ctenosaura_lagopus,(Dyscophus_azureus,Picus_cachinans))),(Mabuya_heterolepidotus,Zosterops_perrotetii)),Falco_pardalis)),Gecarcinus_vertebralis),((Acipenser_eremita,(Machetes_albertisii,Spalax_leuconotus)),(Arenaria_miliaris,Ninox_longicaudata)))),Ctenotus_decor),Rhynchophis_orientalis),(Acipenser_ameiva,Aphonopelma_taczanowskius)),(Lutra_caninus,Osmoderma_plathyrhychos)),Cuculus_enydris),Bradypterus_ciliatus),Hemiscorpius_argali),(Cervus_cyanochloris,Megaloperdix_marcianus)),Aegialites_colchicus),Larus_Anas),Bradypodion_avocetta),((((((((((((Citellus_teguixin,Hydrosaurus_krueperi),Riparia_mlokosiewiczi),(Leiurus_cyanus,Myotis_constricticollis)),Iguana_czerskii),Xenochrophis_unicus),Panthera_castaneus),Ortigometra_aegyptia),Recurvirostra_punctatus),Monticola_terrestris),Eremophila_imperator),Leiocephalus_rosmarus),Scolopendra_armeniacus)),((((Boa_japonensis,(Nyctixalus_pachypus,Salamandra_sujfunensis)),Chelodina_versicolor),Terpsihone_tatarica),Regulus_arizonensis)),Onychodactylus_similis),((((((((((Aegialites_montela,Sceloporus_albirostris),(Monticola_pygmaeus,Parnassius_paradisi)),Ctenotus_quinquestriatus),(Gekko_carnifex,Nucifraga_franckii)),Ovis_africanus),Eumeces_amethistina),(Arenaria_communis,Gerrhosaurus_glaucescens)),Minipterus_molurus),((Androctonus_cliffordii,Mesoplodon_turneri),Gambelia_virgo)),((Apodora_enydris,Ziphius_varius),Dasypeltis_rostratus))),(Agama_sagrei,(Archispirostreptus_weberi,Grammostola_adspersus))),(((((((((Acanthosaura_bonasus,((Buthus_virgo,Sturnus_gregaria),((((Oligodon_politus,(Pandion_lutris,Rissa_lutris)),Selenocosmia_aleutica),Pusa_americanus),Tursiops_percnopterus))),Aix_leucotus),(Balaena_macrops,Vormela_scalaris)),Rhodostethia_dactylisonans),((((((((Bradyporus_fuscatus,((Calidris_giganteus,Oenanthe_torquatus),Totanus_amethistina)),Homopholis_leporosum),Chettussia_aestivus),(Hottentotta_melonotis,Testudo_albicilla)),Phalacrocorax_chamaeleontinus),Phyllopneuste_albatrus),Cuculus_irregularis),Grampus_fragrans)),Numenius_salvator),Sterna_japonica),Phasianus_aspera),((((((((((Alcedo_scincoides,Sphenurus_wumuzusume),Cottus_azureus),Himantopus_rufina),(Otis_leucorodia,Terpsihone_cocincinus)),(Bos_prasina,Fregilegus_glacialis)),Madagascarophis_euptilura),Querquedula_blythi),Laudakia_scalaris),(Dahurinaia_scincoides,((Eumeces_aeruginosus,Rhodostethia_garmani),Sterna_vereda))),Eudramias_nebrius))),(((Chrttusia_sauromates,((Ctenosaura_maritimus,Salmo_borealis),(Cuora_leucoryphus,Salvelinus_nigrolineatus))),Net_cavirostris),Osmoderma_filipjevi)),((((Babycurus_ferrumequinum,Himantopus_floridana),Remiz_tridactylum),Elaphe_indicus),Holodactylus_vertebralis)),Parus_aeruginosus),(((((Antilope_hosii,Xenochrophis_armata),Caiman_subruficollis),Lamprolepis_piceus),(Dipsosaurus_docilis,Perdix_prasina)),Lagenorhynchus_platycephala)),Scaphiopus_means),(Leiolepis_plumifrons,Rhinolophus_sinensis)),Pleurodeles_vulpes),((Heteroscodra_arizonensis,Mochlus_guttifer),Pedostibes_sibirica)),Buthacus_keyzerlingii),(Cuon_armeniacus,Pandion_diffidens)),Vormela_vastus),Sorex_ceterus),(Branta_radiata,(Eutamias_elegans,Lampropeltis_lesueurii))),(((((((((((((Accipiter_modestus,Camptoloma_plathyrhychos),(((Chettussia_marmorata,Desnana_eulophotes),((Chrysopelea_elaphus,Holodactylus_aeruginosus),(Saxicola_spaldingi,Squaterola_davidiana))),Trachemys_politus)),Chrysemys_fulvus),Eulabeia_flavigularis),((Brachyramphus_tentaculatum,Scolopax_monachus),Pica_subrufa)),(Burhinus_aristotelis,Rufibrenta_paganus)),Net_maculatum),(Ceratophrys_eburnea,Polypedates_deminutus)),(Lepidobatrachus_completus,Pseudorca_citrsola)),(((((((((Agama_japonensis,Vipera_teniotis),(((((Castor_vittatus,(Chlamydosaurus_taezanowskyi,Leiopython_miliaris)),Hyperoodon_subniger),(Gallinago_xanthocheilus,Ninox_avicularia)),(Castor_vulpes,Phrynosoma_lividum)),Eubalaena_arcticus)),Ortigometra_bimaculata),((Athene_flavescens,(Haplopelma_hemilasius,Scolopendra_veredus)),Certhia_sibiricus)),Liasis_purpurascens),Rissa_hyperboreus),Nhandu_macrops),Syrrhaptes_kazanakowi),Grammostola_maldivarum)),Squaterola_diffidens),Chalcides_vittatus),(((Boiga_dione,Parnassius_rutilans),Chlamydotis_cyanogaster),Philothamnus_taeniura))),Aythia_uluguruensis),((Ketupa_himantopus,Phormictopus_madagascariensis),Scolopendra_hemionus)),(((Alloporus_plathyrhychos,((Citellus_armeniacus,Tupinambus_maculata),Phrynomerus_microlepis)),Castor_molurus),(Bradyporus_haliaetus,Chelodina_ion))),Ophisops_turtur),(Aquila_dispar,(((Bradypodion_perrotetii,Vormela_graeca),((((((Burhinus_politus,Holaspis_auriculatus),Parnassius_scrofa),Telescopus_cioides),Rhabdophis_pulchripes),((Chrttusia_insignis,Leiolepis_cristatus),Trionyx_murinus)),Eremophila_gallicus)),Capeila_guentheri))),(Porphyrio_colubrinus,Saga_guttifer)),((((((Eubalaena_lagopus,Gyps_subruficollis),Leiocephalus_canagica),Phrynocephalus_jacksoni),Neolycaena_galeatus),Podoces_sepsoides),Sterna_brachydactyla)),(((((Alopex_leporosum,Vanellus_pygmaeus),((Coregonus_giganteus,((Pandinus_macrops,Squaterola_albigula),Selenocosmia_australis)),Cyclemys_saxatilis)),((Balaenoptera_lepturus,Gekko_helvetica),((Budytes_jaculus,((Buthus_stimsoni,Middendorffinaia_vermiculatus),Hirundo_ammon)),Eutamias_moschata))),Caiman_modestus),Eubalaena_leucomystax)),Acanthosaura_vipio),Equus_stagnalis),Moschus_atrigularis),((((((((((((((Accipiter_scincoides,(Allactaga_minutus,Marmota_oedicnemus)),Hemitheconyx_hispida),((((Bombyx_clarus,Haplopelma_aeruginosus),Leiopython_geniculata),Chrysopelea_caudatus),Osmoderma_pachypus)),Vanellus_cyanus),(((((Falcipennis_castus,(Phormictopus_decorus,Tropidurus_noctua)),(((Kaloula_classicus,Myotis_bifasciatus),Salamandra_torquatus),Squaterola_cambridgei)),Lobipes_caesius),Scolopendra_triangulum),Seokia_plumifrons)),Python_graeca),Zosterops_gordoni),((Calidris_blakistoni,(Erpeton_fluviatilis,Vormela_quadrivirgata)),Hemiscorpius_corticale)),(Chlamydotis_salamandra,Pyxicephalus_cancerides)),Leiolepis_teniotis),Phrynohyas_himantopus),(Capra_mexicanum,Iguana_caryocatactes)),Natriciteres_radiata),Arctomys_gallinago))),(Aix_noctua,Corytophanes_avinivi)),Theloderma_hirundo),(((Dahurinaia_cinereus,Gecarcinus_minor),Spermophilus_crucigera),(((Kassina_indicus,Ursus_ammon),Scaphiophryne_carinatus),Upupa_fluviatilis))),(((((((Acanthis_celeber,Monachus_indicus),Eutamias_ichthyaetus),(Bronchocela_pardus,Heterodon_ochropus)),(Nyctaalus_walti,Pachytriton_hilarii)),((Accipiter_nivicola,(((Aegialifes_rufodorsata,Kinixys_dennysii),(((((Apus_major,(Ctenosaura_schneideri,((Cygnus_mutabilis,Tiliqua_zagrosensis),(Natriciteres_lesueurii,Phalaropus_pardus)))),((((Certhia_nivicola,(Erpeton_exquisita,Leptopelis_nivicola)),(Hyla_femoralis,Lanius_tetrax)),(((((Ciconia_alcinous,((Citharacanthus_angustirostris,Haliaeetus_haliaetus),Uroplatus_agama)),Iomachus_arvensis),Philomachus_leucocephala),Eubalaena_amboinensis),Phormictopus_leucotus)),Tursiops_obsoleta)),((Budytes_hendersoni,Gallinago_pyromelana),Teratoscincus_bengalensis)),((((Arenaria_aspera,(Casarca_crocodilus,Lasiodora_savignii)),(((Cyclemys_mitratus,Eutamias_margaritifera),Tropidurus_labiatus),Pterocles_crocodilus)),Streptopelia_jubata),Budytes_eburnea)),(Colaeus_moschiferus,Vulpanser_mlokosiewiczi))),Oxyura_dubius)),Phylloscopus_falcipennis)),((((((((((((((((((((((((((Acanthogonatus_porphyrio,(Pseudorca_bengkuluensis,Pyrgilauda_catenifer)),((((Aegialifes_pholeter,(Columba_canus,Minipterus_cristatella)),Lycaenopsis_boschas),(((Emberiza_nebrius,Parnassius_crispus),(Osteopilus_troglodytes,Saga_jacksoni)),Lepidobatrachus_arizonensis)),Rissa_ochropus)),Scaphiopus_caninus),((((((((Alloporus_smithii,Capella_subniger),(Cervus_ulikovskii,Hirundo_japonica)),Remiz_cingulata),Capreolus_bairdii),Cynops_hyemalis),Pedostibes_daurica),(Salamandra_flava,Strepsilas_tinnunculus)),Philomachus_porzana)),(Epipedobates_ridibundus,Vipera_rutila)),((Dasypeltis_collectivus,Net_chamaeleontinus),Equus_circia)),Teratolepis_vitticeps),Capreolus_flavolineata),Kaloula_oenanthe),(Eschrichtius_lasiopterus,Pelusios_leptochelis)),((((((((((((Acheron_vipio,Phrynops_godlewskii),((Alcedo_caeruleus,Mustela_nelsonii),Vormela_vitulina)),((Epipedobates_circia,Limnodromus_guttifer),Megaloperdix_clypeatus)),((Bradypodion_naumanni,crecca_flammea),Kinixys_solitaria)),Odonthurus_ciliatus),((Apodora_eremita,(Felis_paradoxus,Polypedates_scrofa)),((Balaena_pulchra,(Scolopendra_pygmaeus,Ziphius_citrsola)),(Bronchocela_cavimanus,Phrynops_clericalis)))),((Bombus_celer,Monodon_albopillosum),Ovis_fimbriatus)),(Corvus_radiata,(Ortigometra_adspersus,Pratincola_medici))),((((((((((((((((((((Actitis_bicinctores,((Anas_molurus,(((Buthacus_gibbosus,((Emydura_nupta,Eucratoscelus_korschun),Heterodon_cynodon)),Chelus_papuana),Plethodon_doctus)),(((Eryx_tigris,Uncia_riparia),Ingerophrynus_kopsteini),Falco_gebleri))),Pachytriton_murinus),((Gavia_spilota,Morelia_catenifer),Thecla_deserti)),(((((((((((((((Ahaetulla_epops,(((((((Allactaga_caudata,Pachydactylus_japonica),Lepidobatrachus_mongolica),Grus_plathyrhychos),((((((((((Antilope_holbrooki,Sus_anser),Castor_rubida),(Boa_kurilensis,Pleurodeles_colombianus)),Leiocephalus_labiatus),Rhacodactylus_graculus),(Eurynorhynchus_isabellina,Ptychozoon_albatrus)),Lamprophis_giganteus),Homalopsis_perrotetii),Coenobita_punctatus),Cygnus_spinifera)),Grampus_coloratovillosum),(Bombyx_leucogeranus,Furcifer_medici)),Argynnis_oenanthe)),Psalmopoeus_prasina),((Gekko_apus,Gyps_scincoides),Tadorna_pholeter)),Fuligula_difficilis),Platalea_viscivorus),(((Anthropoides_shadini,(Fulica_scutulata,Ophisops_sinensis)),(((((Balaena_fragrans,Bombyx_picta),Chalcides_miliaris),Leiolepis_nipalensis),Phasianus_piceus),Felis_pyromelana)),Dahurinaia_amboinensis)),Phrynops_venulosa),Apus_regius),((((Fulica_hilarii,Recurvirostra_galeatus),Plegadis_hendricksoni),(Pelodytes_martensi,(Tryngites_javanica,Tupinambus_nigrolineatus))),Leiopython_trianguligerus)),Rhacophorus_sanguinolentus),Chrysemys_glareola),Strepsilas_totanus),Corvus_taxus),Natriciteres_viscivorus),Mylopharyngodon_mystaceus)),Hirundo_aleutica),Apodora_cygnus),Diomedea_rostratus),(Aegialifes_ridibundus,(Dasypeltis_ciliatus,Melanocorypha_erythronota))),(((((((((((Aegypius_castaneus,Sceloporus_borealis),Pandinus_eburnea),((Calidris_proteus,Pyrrhocorax_dispar),Sorex_insularis)),((Cyriopagopus_novaeguineae,Eschrichtius_aspera),Hydrochelidon_paganus)),((Hadogenes_odoratus,Siniperca_parvus),Phrynocephalus_pygargus)),Lyrurus_arenarius),Grammostola_pelagicus),Arenaria_ciliatus),Eunectes_clypeatus),((((((((((((Agama_tadorna,Homopholis_wumuzusume),(Amphiuma_pugatshuki,Dahurinaia_naumanni)),((Buthacus_aceras,Gerrhosaurus_taxispilota),Philacte_leucopsis)),Cervus_hyemalis),Scaphiophryne_ibera),Damon_vitticeps),Melanocoryhpa_ridibundus),Meles_glottis),(Coleonyx_minutus,Hyla_mnemosyne)),(((((Alauda_mutabilis,((Aphonopelma_leporosum,(Kinixys_clarus,Litoria_pygargus)),Aquila_guineti)),Boa_pygmeus),Balaenoptera_unicolor),Cyclagras_bengkuluensis),Felis_corsac)),Hadrurus_insularis),((Capella_riparia,Python_decorus),((Hemitheconyx_nigropalmatus,Pusa_constricticollis),Testudo_helvetica)))),Teratolepis_bicinctores)),Hadrurus_gratiosa),(Dendrobates_vipio,Nemorhaedus_gobio)),((Ambystoma_horridum,Phrynocephalus_rufus),Latastia_carolinensis)),Cervus_milii),Sphenurus_gemmicincta),((Babycurus_lobatus,Ovis_cristatellus),Pratincola_caelebs)),((((Anthropoidae_kurilensis,(((((Avicularia_sinensis,Physignathus_tricolor),Lamprolepis_geniculata),(((Buteo_buccata,Vulpanser_odoratus),(Chlamydotis_docilis,(Grus_leucocephala,(Leptobrachium_moschata,(Litoria_sp,Tamias_grunniens))))),Tylototriton_ocellatus)),Siniperca_aeruginosus),Selenocosmia_exanthematicus)),(Buthus_exquisita,(Odobenus_weberi,Pusa_hongkongensis))),(Phrynomerus_dominus,Pterinochilus_leucogeranus)),Lamprolepis_seemani)),(((Cyclemys_tricolor,Phrynops_serpentina),Underwoodisaurus_kuhli),Falcipennis_semipalmatus)),Gazella_anatina),Epipedobates_armeniacus),(((((((((Allobates_rusticolus,(Apalone_apollo,(Phalaropus_solitaria,crecca_troglodytes))),Branta_dispar),(((Bufo_cavirostris,(Gavia_eremita,Scolopendra_infrafrenata)),Limnodromus_maritimus),Polypedates_aegagrus)),Eremophila_cianeus),(Pareas_tenuirostris,Phrynops_unicus)),(Oenanthe_wislizeni,Rhacodactylus_casualis)),Natriciteres_helvetica),Falcipennis_pulchripes),Nyctaalus_arvensis))),(Nipponia_mlokosiewiczi,Ziphius_rudicolis)),((Chen_mystacinus,(Haliaetus_morinellus,Homalopsis_reinwardti)),((((Chettussia_xanthocheilus,Sus_guentheri),Lutra_garulla),Passer_cavirostris),(((Eubalaena_emilia,Ortigometra_subruficollis),Perdix_garmani),Mogera_grunniens)))),(Butastur_cristatellus,Rhabdophis_exquisita))),Odobenus_glacialis),(((((Acanthosaura_rutila,Cuora_brevipes),Coturnix_fasciata),Accipiter_canagica),Alloporus_tataricus),Philacte_percnopterus)),Brachypelma_angustirostris),Dipsosaurus_duplus),(Anodonta_grupus,Falco_undulata)),Bombyx_caudatus),(Nemachilus_dentatus,Tylototriton_guineti)),Phoca_porphyrio),(Grampus_striatus,Lamprolepis_bairdii)),((Chelodina_agama,(Oceanodroma_fiber,Turdus_bewickii)),Holaspis_clinatus)),Chlamydotis_hispida),Cyclagras_mackloti),((((((((((Aix_galeatus,Cottus_gregarius),Osteopilus_fiber),Pelodiscus_modestus),Capreolus_nyroca),(Hadrurus_flavigularis,(Homalopsis_horridum,Oedura_castaneus))),Syrrhaptes_caudolineatus),(Lepus_grossmani,Tadarida_cherrug)),(Latastia_marmoratus,(Scolopendra_garmani,Varanus_viridescens))),Mylopharyngodon_armata),Allobates_pardalis)),Eschrichtius_metallica),((Eirenis_enhydris,(Rhabdophis_taczanowskius,Vormela_kingii)),Macrorhamphus_caniceps))),Paraphysa_longipennis)),Phelsuma_hemionus),(((((((((Amphiuma_mutabilis,(((Eunectes_grossmani,Lyrurus_adamsii),Xenopeltis_cyanogenys),Salamandra_galeatus)),Trachemys_limosa),Procellaria_nigrolineatus),(((Apus_maurus,Trionyx_guttata),(Athene_celer,(Cervus_platyrhinos,Liasis_regius))),Fulica_laevis)),(((((((Basiliscus_subruficollis,Rhabdophis_Jankowskii),Chlamydosaurus_alterna),Dasypeltis_caniceps),(Lepus_quadrivirgata,Riparia_arseniavi)),Moschus_isabellina),Mabuya_cristata),Cyclemys_peregrinus)),(Picus_bellii,Pleurodeles_insignis)),(Hyperoodon_cristatellus,Uromastyx_heliaca)),(Hydrochelidon_aleutica,(Pachytriton_armeniacus,Tupinambus_madagascariensis))),Poephagus_eulophotes)),Chen_viridescens),(((((((((((((((((((((Acanthogonatus_pulchra,Eubalaena_stagnalis),((((((((Acanthoscurria_salamandra,Lycaenopsis_means),(Columba_caeruleus,Ctenotus_pelagicus)),Megaptera_barbata),((((((((Accipiter_enydris,Capeila_trianguligerus),(((((((((((((((((((Anthropoidae_trianguligerus,((Chelodina_pusilla,Kassina_septentrionalis),Coturnix_doriae)),Chrttusia_melanostictus),Gypaetus_flava),Colaeus_piscator),Phyllopneuste_albopillosum),Polypedates_arvensis),(Myotis_regius,Sturnus_bengkuluensis)),Rhynchophis_aegagrus),Elaphe_yeltoniensis),(((Bradyporus_decorus,Pelecanus_glutinosus),Ceratophrys_ciliatus),Seokia_rupestris)),(Butastur_kazanakowi,Eunectes_albertisii)),(((Calidris_colombianus,(Chlamydotis_bedriagai,(Minipterus_salvator,Platemys_scalaris))),(Capra_bengkuluensis,Pratincola_bewickii)),Coregonus_plumipes)),Vormela_fasciolata),Capeila_mykiss),Ophisops_sanguinolentus),Phrynomerus_caudolineatus),Opheodrys_dendrophila),(Bronchocela_albocinctus,Dahurinaia_leucostomum)),Fregilegus_albirostris)),((((((((Brachypelma_alpina,Pleurodeles_carinata),Spalerosophis_nippon),Capra_leucophyllata),Odobenus_exanthematicus),Elseya_leucophtalmos),(Eumeces_wogura,(Falcipennis_cygnus,Haliaetus_clarus))),Cuora_caudatus),Sphenurus_subglobosa)),Pterinochilus_oenanthe),(Totanus_mlokosiewiczi,Xenophrys_korschun)),((Chettussia_monorhis,Grampus_physalus),Seokia_mystaceus)),(((((Ahaetulla_undulata,(Chelodina_sauritus,(Hysterocrates_turtor,((Machetes_flavolineata,Scincus_casualis),Philomachus_marcianus)))),Eudramias_jacksoni),Tringa_nippon),((((((((Anser_rudicolis,Ketupa_hendricksoni),Dahurinaia_atrigularis),((Colaeus_bobac,Rhombomys_fuscus),Paramesotriton_fuscus)),((((Crocodylus_borealis,(((Eunectes_temminckii,Oxyura_taezanowskyi),Phyllopneuste_albirostris),Himantopus_docilis)),Crocodylus_reinwardti),Hadrurus_tadorna),Lutra_merganser)),Uncia_rosea),Dendrobates_troglodytes),Pelecanus_modestus),(Paraphysa_cyanogaster,Phalaropus_taezanowskyi))),Phalaropus_peregrinus)),Dipsosaurus_intermedia)),(Emydura_picta,Net_arseniavi)),Gyps_indicus),Homopholis_pygmaeus),((Ardea_grus,Charadrius_brachydactyla),Oedura_classicus))),((Haplopelma_temminskii,Spermophilus_albertisii),Ziphius_tinnunculus)),Plethodon_cocincinus),(((((Cypselus_leucostomum,Trachemys_novaeangliae),Pseudorca_bairdi),Pagophila_rubida),Eumeces_subrubrum),Phrynohyas_cocincinus)),Rhinolophus_laevis),Dahurinaia_crispus),(((((Ameiva_nasuta,Gallinago_regius),Calotes_constrictor),(Pelodiscus_heterolepidotus,Porzana_pallidus)),(((Aquila_cinclus,(((Egretta_dentata,Pelecanus_rosea),Holaspis_nivalis),Xenochrophis_orientalis)),((((Buthacus_falcipennis,Testudo_bedriagai),(Litoria_cornix,Salmo_falcipennis)),Charadrius_carnifex),Margaritifera_vittatus)),(Limosa_cliffordii,Porphyrio_flavirufa))),(Lampropeltis_arseniavi,Leiocephalus_dentata))),((((Alopex_vertebralis,Lampropeltis_personata),(((Anthropoides_getula,Gambelia_lobatus),(((Balaenoptera_ferina,Mareca_albopillosum),Oedura_maihensis),(((Balaenoptera_korschun,Bubulcus_castaneus),((Corallus_bimaculata,Phrynosoma_cyanus),Eumeces_javanica)),Mogera_smithii))),Eremophila_spinifera)),((Capreolus_paganus,(Certhia_linaria,Pachydactylus_canorus)),Cygnopsis_citreola)),Bos_saiga)),Saiga_auriculatus),((((((Alauda_cinerea,((((Almo_melonotis,Pyxicephalus_bifasciatus),(Polypedates_emilia,Sceloporus_cyanogenys)),Pareas_madagascariensis),Epicrates_australis)),Bufo_tricolor),Madagascarophis_arcticus),Emberiza_vitticeps),Antaresia_mitratus),Ophisops_leucotus)),Capeila_miliaris),((Ethmostigmus_celer,(Lobipes_pulcher,Tamias_carinatus)),Rufibrenta_scalaris)),Certhia_cristatella),Tupinambus_rutilans),((((Homopholis_leiosoma,Paraphysa_collaris),Pseudemys_caelebs),Lyrurus_arseniavi),Pyrrhocorax_tarda)),Sphenurus_moschiferus),((((Athene_cinereus,(Budytes_erythrogastra,Phasianus_ovata)),Petrocincla_limosa),Totanus_eulophotes),(Theloderma_sudanensis,Tringa_cristatus))),Perdix_godlewskii),(Scorpio_leptochelis,((((((((Accipiter_mystacinus,(Leptobrachium_mnemosyne,Xenophrys_clarus)),Picus_graeca),((Ctenosaura_calvus,Opheodrys_homeana),Hemitheconyx_aureostriata)),Philacte_filipjevi),Vulpes_graeca),Larus_macqueni),Corytophanes_melanostictus),(Ketupa_gemmicincta,Lutra_deserti)))),(Fuligula_flavomaculatus,(Siniperca_homeana,Vormela_temminckii)))),(Tetraogallus_spaldingi,(((((Fulica_cepediana,(Spalerosophis_avocetta,Enhydris_rufina)),((((((Acanthogonatus_cristatellus,Chrysopelea_tuberculosus),((Candoia_agama,Eremophila_smithi),Certhia_holbrooki)),((((Alloporus_novaeangliae,((((((((Ambystoma_dactylisonans,Salmo_milii),((Aquila_gibbosus,Cyriopagopus_dentatus),Eudramias_tuberculosus)),Androctonus_viscivorus),Ctenosaura_querquedula),Bombyx_gallicus),((Chamaeleo_himantopus,(Enhydra_duplex,Osmoderma_weberi)),Remiz_pygmeus)),((Enhudra_dignus,(Halichoerus_coturnix,Kinixys_hardwickii)),Limnaeus_leucogaster)),Chlidonias_bedriagai)),(Norops_arizonensis,Tetrao_spaldingi)),Capeila_exquisita),((Egretta_leucostomum,(Parabuthus_middendorffi,Streptopelia_verrucosus)),Homopholis_scripta))),Lasiodora_dubius),(((((((Caiman_platycephala,(Latastia_azureus,Thamnophis_davidiana)),Ingerophrynus_pachypus),(((Falcipennis_zagrosensis,Lyrurus_fuellebornii),((Larus_leucogaster,Phrynosoma_calamita),(Rangifer_longipes,Seokia_opimus))),Spermophilus_fuscus)),Nerodia_decorus),Lycodon_himalayensis),Chrysopelea_nivalis),Citellus_rutila)),((((Falcipennis_atra,Turdus_schokari),Perdix_dispar),Pyrgilauda_peregusna),((Gambelia_marmorata,((((Gecarcinus_querquedula,(Nucifraga_circia,Phalaropus_medirostris)),Tylototriton_walti),Spalerosophis_angustirostris),(Gonyosoma_collybitus,Melanocoryhpa_mirabilis))),Pelecanus_maldivarum)))),((Tadarida_gibbosus,Plegadis_caryocatactes),((Oxyura_floridana,Rhabdophis_nigra),Accipiter_minor))),Sternotherus_marmoratus),((((Acanthis_enydris,Numenius_chrysaetus),(((((((((Atrophaneura_chukar,Chondropython_erythronota),Mareca_monedula),Rosalia_stejnegeri),Laudakia_davidiana),(Gongylophis_argentatus,Mesoplodon_monedula)),(Cuon_veredus,Rhamphiophis_gallicus)),Natriciteres_tolai),Dipsosaurus_interiorata),Psammophis_garulla)),(Moschus_aestivus,(Clemmys_fulva,Mesoplodon_pallidus))),((Damon_pusilla,Sorex_madagascariensis),Dipsosaurus_ciliatus))))),((((Oxyura_cyanus,(Aythia_pulchra,(((((Anthropoidae_getula,Eudrornias_lutris),((Brachypelma_vulgaris,Mergus_crocodilus),(Ptychozoon_insignis,Squaterola_cyanea))),((((Bradypterus_japonensis,Seokia_zagrosensis),Mesoplodon_torquatus),Cervus_campestris),Emydura_iguana)),(Ctenosaura_cianeus,Eryx_argentatus)),(Capella_meermani,Siniperca_javanica)))),(Enhudra_australis,(Bubulcus_hypomelus,Odonthurus_weberi))),((Epicrates_ameiva,Megophrys_armeniacus),(Gongylophis_bengalensis,Lampropeltis_flavescens))),(((Phrynops_schrencki,(Balaena_not,Bubulcus_chamaeleontinus)),((Ninox_dione,Totanus_Anas),Gerrhosaurus_hipposideros)),((Gongylophis_subrufa,Triturus_helvetica),(((((Cuora_tetrax,(Monticola_stejnegeri,(Pleurodeles_rupestris,Ctenosaura_canagica))),Anas_imperator),Callipogon_oxycephalum),((Grus_ion,Neophron_tridactylum),(Sitta_pulchripes,Monodon_gecko))),(Phylloscopus_mykiss,Phasianus_truncatus)))))),((((((((((Abantias_weberi,((((((((((((((((((((((((((((Acanthoceros_emarginatus,(Chettussia_altaica,Moschus_azureus)),(Branta_regius,Eulabeia_longicaudata)),(Atrophaneura_dennysii,Pyxicephalus_eximia)),(Hemiscorpius_musicus,Leiopython_auriculatus)),Chelus_trigonopodus),Petrocincla_cambridgei),Ketupa_irregularis),((((Aythia_fissipes,((((((((Branta_monoceros,(Pachytriton_stagnalis,Porzana_clypeata)),(Chrysemys_japonica,Citellus_tarda)),(Geochelone_monachus,Polypedates_sagrei)),(Larus_ovata,Mergus_colchicus)),Pleurodeles_carinatus),Latastia_rubicola),Gonyosoma_insularis),Uncia_carinata)),Balaena_lagopus),Scaphiophryne_brongersmai),((((Bombycilla_manul,(Pelodiscus_novaeangliae,Sterna_rusticolus)),Phrynohyas_carinatus),Leuciscus_fallax),((Grus_breitensteini,(Pusa_heliaca,Tadarida_jacksoni)),Motacilla_imperator)))),((((Aegialifes_arvensis,((Dipus_celer,Thecla_boyciana),Haliaetus_brandtii)),Syrrhaptes_coelestinus),(Chettussia_Jankowskii,Iomachus_atrigularis)),Monticola_tarandus)),((((((((((Acanthoscurria_stimsoni,Pandinus_leucophyllata),Chalcides_pugatshuki),Phrynops_canus),Theloderma_ferruginea),((((((Chrysemys_scalaris,Tetrao_heterolepidotus),(Cottus_viridescens,(((((Cyclagras_prominanus,Grampus_ion),Elseya_carinata),(Gambelia_cranwelli,Tamias_cliffordii)),Recurvirostra_atra),((Micropalama_agama,Rufibrenta_orientalis),Squaterola_opimus)))),Ursus_albopillosum),Scincus_cinereus),(Podoces_avosetta,Thamnophis_caerulea)),Ursus_limosa)),(Chelodina_vastus,((Cinclus_communis,Phasianus_montela),(Gecarcinus_caudata,Phrynocephalus_jaspidea)))),Holodactylus_microlepis),((((((Bombycilla_pholeter,Scolopax_corone),(((((Lamprolepis_ladogensis,Lepidobatrachus_stejnegeri),Lystrophis_bairdii),Margaritifera_subruficollis),crecca_grunniens),Neolycaena_griseus)),Pseudemys_nivalis),((Kinixys_monachus,Osteopilus_hilarii),Phyllopneuste_citrsola)),Scaphiopus_sibirica),Otocoris_dignus)),((Fregilegus_atthis,Pelomedusa_calamita),Vipera_grus)),Macrorhamphus_occitanus)),(((Anthropoides_rufus,Riparia_hodgsoni),(Leuciscus_tarandus,Philothamnus_parreyssi)),((Melanocorypha_cristatellus,Plethodon_rosea),Ninox_imperator))),Alectoris_scabra),(Eulabeia_coturnix,Nhandu_cristatella)),((Ovis_ameiva,Trapelus_sauromates),(Phormictopus_monachus,Rissa_marinus))),Citellus_maritimus),(Capra_diadema,Streptopelia_nigriceps)),Monachus_shadini),Neophron_leucomelas),Varanus_davidiana),Uncia_emilia),(Limnodromus_decor,Tamias_graeca)),Scaphiophryne_nigropalmatus),Aplopeltura_squaterola),Grampus_sinensis),(((Acanthogonatus_brandtii,Eudrornias_mackloti),(((Amphiuma_viridescens,Eryx_tigrinus),Tringa_argali),Prunella_pachypus)),Athene_cliffordii)),(Lepus_pygargus,Lobipes_maldivarum)),(Cynops_gibbosus,((Liasis_aristotelis,Tadorna_leucogaster),(Pyxicephalus_argentatus,Sus_karelini)))),Liasis_undulata)),((((((((((((((((((((((((Accipiter_scripta,Erpeton_albopillosum),Pachydactylus_ferox),Squaterola_leucoptera),(Alcedo_classicus,((Cervus_enhydris,Middendorffinaia_griseus),Neophron_adspersus))),Lasiodora_bengkuluensis),(Cardiocranius_sieboldii,Pterinochilus_floridana)),(((((((Acipenser_vegans,Sturnus_ferina),Aix_helvetica),((Gambelia_cristatellus,(Leptopelis_ichthyaetus,Oceanodroma_rudicolis)),Theloderma_boyciana)),Scaphiopus_cherrug),(Bradypterus_reticulatus,Fregilegus_tenuirostris)),((((((((Almo_collaris,Natriciteres_corticale),((Arenaria_doctus,crecca_purpurascens),Balaena_maritimus)),((((((Argynnis_vipio,Osteopilus_novaeguineae),Synthliboramphus_diffidens),(Citharacanthus_melanoleucus,(Pyxicephalus_nivalis,Uroplatus_ussuriensis))),Synthliboramphus_colombianus),Rhacophorus_himalayensis),((Eudramias_dominicus,(Geochelone_pendulinus,Ophisops_smithii)),Picus_cyanochloris))),Bombina_australis),((Cottus_albertisii,Phrynosoma_cancerides),Oligodon_barbata)),(((((Bubulcus_scabra,Moschus_sphenocercus),Netta_spaldingi),(Otis_nebrius,Pterocles_erythronotus)),Monachus_krueperi),Scaphiophryne_quadriocellata)),Kinixys_vegans),Ardea_deserti)),Lutra_fiber)),Ptychozoon_ameiva),Vulpes_pulchra),((((Ambystoma_exquisita,(Ambystoma_leucomystax,(Chrysopelea_radiata,Tamias_prasina))),Hadogenes_fallax),Ortigometra_aceras),(((Basiliscus_fluviatilis,Middendorffinaia_monorhis),(Hottentotta_climacophora,Pachydactylus_nelsonii)),Melanocorypha_azureus))),(((((((Aegialifes_squamatus,Salvelinus_spaldingi),Eudramias_isabellina),Ethmostigmus_jaculus),((Bubulcus_variabilis,Dafila_parreyssi),Kinosternon_fuliginosus)),((Balaena_colchicus,Enhudra_ocellatus),(Basiliscus_rutilans,Xenophrys_crucigera))),((((((((Alcedo_coelestinus,Chlamydosaurus_leiosoma),Squaterola_dione),Mesoplodon_isabellina),Phelsuma_epops),Pusa_piscator),Alectoris_monacha),Buthacus_fuliginosus),(Brachyramphus_ochropus,Sericinus_angulifer))),Falcipennis_cavirostris)),(Megophrys_jubata,Tursiops_boulengeri)),Oenanthe_graeca),Nemachilus_laevis),((((Ahaetulla_leucoryphus,(Gekko_floridana,Turdus_schneideri)),Anthropoides_weberi),Phelsuma_ignicapillus),Salmo_rupestris)),Tringa_nigra),Eubalaena_schrencki),Furcifer_glutinosus),Bubulcus_canagica),(Heterodon_laevis,((Ortigometra_armata,Otocoris_rubicola),Uroplatus_perdix))),((Bombina_marmoratus,Parnassius_sujfunensis),Phrynocephalus_dennysii)),Netta_australis),Ninox_hypoleucus),Homopholis_hyemalis)),Agama_melanoleucus),(Allactaga_mitratus,((((((((Aphonopelma_rudicolis,(Otocoris_middendorffi,Sterna_gebleri)),(Charadrius_vermiculatus,((Chen_virgo,Cinclus_montela),Liasis_caudatus))),(Colaeus_exanthematicus,(Tadarida_aureostriata,Triturus_tentaculatum))),Grammostola_serpentina),Salvelinus_avinivi),Polypedates_cygnus),Ptyodactylus_temminckii),Pseudorca_rudicolis))),((((((((Alpes_gobio,((((Chlidonias_atrigularis,Pelusios_medirostris),Hemitheconyx_undulata),Pica_breitensteini),(Eirenis_clypeata,Odobenus_nyroca))),(Aplopeltura_pallidus,(Phyllopneuste_hungaricus,Pituophis_rufodorsata))),(Hyla_longicollis,Synthliboramphus_Bernicla)),Psammophis_quinquestriatus),((Gekko_paradoxus,Riparia_chamaeleontinus),Haliaetus_leporosum)),Oenanthe_cepediana),crecca_colombianus),Anthropoidae_cinclus)),(Phrynocephalus_meles,Sphenops_leucogeranus)),Eremophila_undulata),Nyctixalus_taeniura),Ortigometra_vastus),(((Aegialites_merganser,(Budytes_helvetica,Hirundo_daurica)),((((Grampus_nyroca,Dyscophus_zagrosensis),((((((Acanthogonatus_lesueurii,Pyrrhocorax_grossmani),Corytophanes_erythronotus),(Eschrichtius_thibetanus,Pseudemys_monoceros)),(Chettussia_eulophotes,Enhudra_erythropus)),(Bombus_rupestris,Procellaria_molurus)),(Alaus_smaragdina,Marmota_soloensis))),(Dipus_taxus,(((Coleonyx_ruthveni,Sphenurus_rufina),Rhesus_adamsii),((((((((((((((((((((((((((((Acanthogonatus_adamsii,((Apodora_scripta,((Corallus_porphyrio,Saxicola_leucocephala),(Gyps_emarginatus,(Lepus_vitulina,Ptyodactylus_marinus)))),(Salvelinus_nasuta,Scaphiopus_laticauda))),(Grus_interpres,Rhabdophis_trigonopodus)),((Clemmys_subglobosa,(Coenobita_boa,Erpeton_ion)),Motacilla_sibiricus)),Damon_breitensteini),((Arctomys_perrotetii,(Atrophaneura_caudata,Coregonus_merganser)),Neophron_peregusna)),(Anas_leucogaster,Eublepharis_fuscatus)),(((Avicularia_pugnax,(Cyriopagopus_versicolor,Varanus_subniger)),(Boiga_middendorffi,Phelsuma_brachydactyla)),Lyrurus_unicus)),((Canis_collybitus,Pelusios_caryocatactes),Pachydactylus_caryocatactes)),Spalerosophis_bairdii),Nipponia_maculatum),Vormela_fimbriatus),((((((((Alaus_bukhunensis,(Circaetus_geniculata,Morelia_sieboldii)),Petrocincla_intermedia),(Hemiscorpius_australis,(Ketupa_saxatilis,Rhacophorus_lineatus))),Teratolepis_rudicolis),Egretta_rupestris),((((((Androctonus_uluguruensis,Kassina_albertisii),Eunectes_scrofa),Ketupa_chrysargos),(Citellus_garullus,(Laudakia_perdix,(Numenius_martensi,(Tadarida_adspersus,Tadarida_cyanogenys))))),(Ctenotus_manul,(Net_albatrus,Python_cinclus))),Clemmys_homeana)),(Clemmys_querquedula,(Parnassius_armeniacus,Upupa_parahybana))),(((Cinclus_fallax,Oenanthe_fasciolata),Ctenosaura_chukar),Phelsuma_longicollis))),(((Apodora_erythrogastra,(Notophthalmus_bairdi,(Rangifer_chrysaetus,Syrrhaptes_gigas))),((Cardiocranius_galeatus,Petrocincla_timidus),Querquedula_lutra)),Cyclemys_pusilla)),(((Acanthoscurria_holbrooki,(((((Accipiter_erythropus,((Agama_caeruleus,Bos_nebrius),Hemiscorpius_gregaria)),Limnaeus_erythronota),((Almo_madagascariensis,Felis_capra),Vulpanser_duplus)),(Phalacrocorax_ibera,Pseudorca_deremensis)),Pterinochilus_musicus)),(Almo_albicilla,((Anthropoidae_pulchripes,Leptobrachium_rufina),((Hydrochelidon_veredus,Picus_sujfunensis),Nerodia_rufodorsata)))),(Netta_kingii,Theloderma_scripta))),Odonthurus_australis),((Bombus_agama,Kassina_aeruginosus),(Erpeton_percnopterus,Phormictopus_virgo))),Falcipennis_septentrionalis),(Amphiuma_mlokosiewiczi,Chamaeleo_completus)),Felis_rostratus),(Carabus_japonica,Equus_lavaretus)),(Chlamydotis_taczanowskius,Thymallus_maculatum)),Lycodon_iguana),Platalea_brevipes),(((((((Balaena_imperator,Gavia_teniotis),Cyriopagopus_duplex),Pareas_vittatus),Phyllopneuste_bairdi),Chlamydosaurus_bairdi),Zosterops_triangulum),(Moschus_unicus,Telescopus_prasina))),Petrocincla_pygargus),Bradypterus_interiorata),(((Alpes_schneideri,((Boa_bairdi,Glareola_oenanthe),((Chamaeleo_boa,Saga_moschiferus),(Mergus_marmorata,Micropalama_hypomelus)))),Nemachilus_salei),Streptopelia_arcticus)),Anas_mystaceus)))),((Pogona_caudolineatus,((Ctenosaura_bengkuluensis,Notophthalmus_gobio),((Acanthosaura_rudicolis,(((((((((((((((Aix_constricticollis,Liasis_iankowskii),Asthenodipsas_meermani),(((((((((Antilope_caesius,(Porphyrio_leiosoma,Selenocosmia_vegans)),(Hottentotta_coelestis,Salamandra_caucasicus)),Oceanodroma_sauritus),Lepus_salvator),((Chelodina_scabra,Rhamphiophis_metallica),((Chlamydosaurus_jaculus,Hemiscorpius_multituberculatus),Thecla_floridana))),Eudrornias_saiga),Aythia_scalaris),Phrynomerus_ladogensis),(Crotaphytus_clinatus,Neolycaena_albocinctus))),(Amphiuma_pulchripes,(((Haliaetus_angulifer,Scolopax_vitticeps),Phoca_cenchria),Odobenus_nigrolineatus))),Panthera_chrysaetos),(Cuculus_aeruginosus,Gekko_prominanus)),Aythya_iguana),Kaloula_maculatum),Remiz_savignii),Sternotherus_doriae),(((Falco_pugnax,Lamprolepis_savignii),(Fuligula_cristatellus,Saiga_perrotetii)),Grus_mystaceus)),((Parus_aceras,Salmo_lasiopterus),Pelodytes_pardus)),Rhacodactylus_celer),Tringa_cyanea),Dendrelaphis_getula)),(Lanius_ovata,(Oxyura_cyanea,Phrynocephalus_uluguruensis))))),((Dyscophus_venulosa,(Macrorhamphus_macularius,Mergus_docilis)),(Tursiops_ornata,(Psammophis_lividum,((Oxyura_smaragdina,Milvus_eburnea),(Tryngites_subminiatus,Aegypius_hirundo)))))))),(((((((Bradyporus_sieboldii,(Eutamias_bifasciatus,(((Scorpio_oxycephalum,(Hyla_aristotelis,Lagenorhynchus_barbata)),(Camptoloma_equestris,((Xenopeltis_perdix,Uroplatus_wumuzusume),Pareas_gregarius))),(Sphenops_eximia,Eulabeia_guentheri)))),Laudakia_standingii),((Turdus_tinnunculus,(Mergus_schreibersi,Pleurodeles_taeniura)),(Phrynomerus_amboinensis,Lutra_orientalis))),((Phrynocephalus_scripta,((Coturnix_vulpes,Brachypelma_ignicapillus),Epipedobates_alpina)),(Lanius_sanguinolentus,Fuligula_botnica))),(((Eutamias_hypoleucos,Megaloperdix_fragrans),Coleonyx_vulpes),((Cypselus_rosmarus,Lamprophis_mongolica),(Haliaeetus_ladogensis,Hirundo_gecko)))),(((Lasiodora_aestivus,((Seokia_livia,Sphenops_aceras),Casarca_ruthveni)),((Acanthis_bellii,Butastur_glacialis),(Porphyrio_grossmani,Buthacus_variabilis))),((Eryx_bicinctores,Phrynops_communis),(Vormela_cranwelli,((Basiliscus_coturnix,Marmota_taezanowskyi),Monodon_caudatus))))),((Hyperoodon_atriceps,Mabuya_marinus),((((Mergus_leucopsis,Mareca_novaeangliae),Paraphysa_mirabilis),(Pleurodeles_troglodytes,(((Ursus_scripta,(Accipiter_laticauda,Gonyosoma_lesueurii)),((Moschus_zenobia,Nyctixalus_flavigularis),(Rhynchaspis_atra,Ptychozoon_chuatsi))),Pelusios_mlokosiewiczi))),Spalerosophis_holbrooki))))));' + + +n=Newick_Tree(s1) +m=Newick_Tree(s2) +cmp_max={} +cmp_min={} +cmp_len={} +mrev=dict(zip(m.labels.values(),m.labels.keys())) +#nrev=dict(zip(n.labels.values(),n.labels.keys())) +def m_index_to_n_postorder_index(x): + return n.postorder_index[n.labels[mrev[x]]] + +def candidates(n,m,mbase): + if len(m.dtree[mbase])==0: + cmp_min[mbase]=m_index_to_n_postorder_index(mbase) + cmp_max[mbase]=m_index_to_n_postorder_index(mbase) + cmp_len[mbase]=1 + # self.width[base]=self.max[base]-self.min[base] + return + else: + for x in m.dtree[mbase]: + candidates(n,m,x) + cmp_min[mbase]=min([cmp_min[x] for x in m.dtree[mbase]]) + cmp_max[mbase]=max([cmp_max[x] for x in m.dtree[mbase]]) + cmp_len[mbase]=sum([cmp_len[x] for x in m.dtree[mbase]]) + # self.width[base]=self.max[base]-self.min[base] + return + +candidates(n,m,m.root) +msplits_in_n_coords=[(cmp_min[x],cmp_max[x]) for x in cmp_min.keys() if cmp_max[x]-cmp_min[x]+1==cmp_len[x] and cmp_len[x]>1 and cmp_len[x]0 and n.max[x]-n.min[x]