Gene-pseudogene evolution: a probabilistic approach

In this section we first introduce the Pseudogenization, Duplication, Loss, Rate and Sequence evolution model, PDLRS. Começamos por definir alguns termos básicos. Uma espécie-árvore é uma árvore binária enraizada que representa a história evolutiva das espécies onde as folhas representam espécies existentes e os vértices internos representam eventos de especiação. Uma árvore-gene é também uma árvore binária enraizada que representa a história evolutiva de um conjunto de genes. Uma árvore genética pode ter genes ou pseudogenes como suas folhas.

o modelo PDLRS

o modelo PDLRS é uma extensão do modelo DLRS obtido pela inclusão também de eventos de pseudogenização. O modelo descreve como uma linhagem de genes evolui dentro de uma espécie-árvore com uma raiz de grau Um, começando pela raiz e, posteriormente, evoluindo para as folhas, enquanto sendo exposto a duplicação de genes, perda de genes, e eventos de pseudogenização a taxas δ, μ, e ψ, respectivamente. Além disso, quando uma linhagem genética atinge um vértice espécie-árvore, ele sempre (i.e., deterministicamente) bifurcados e os dois assim contidos linhagens genéticas continuam a evoluir abaixo do vértice espécie-árvore, um em cada uma de suas duas arestas espécies-árvore de saída.

embora durante este processo, uma linhagem genética pode mudar para uma linhagem pseudogene, uma linhagem pseudogene não é permitido mudar de volta para uma linhagem genética. Os eventos de pseudogenização introduzem dois vértices de grau na árvore genética. Uma linhagem pseudogena se comporta de outra forma como uma linhagem genética, pode duplicar ou se perder durante a evolução, e deterministicamente bifurca quando atinge um vértice espécie-árvore. Uma linhagem que atinge as folhas da árvore-espécie dá origem a uma folha na árvore-gene, representando um gene existente ou pseudogeno. Vértices e arestas da árvore genealógica que não levam a nenhuma dessas folhas existentes são, no entanto, podadas da árvore genealógica (Figura 1). Uma vez que este processo ocorre em uma espécie-árvore com o tempo em seus vértices e arestas, cada evento ocorre em um momento específico. Sempre que um evento cria um novo vértice gene-árvore, o tempo do evento é associado com o novo vértice.

Figura 1
figura 1

Pseudogenization, a Duplicação, a Perda, a Seqüência de evolução & Taxas (PDLRS). A evolução de um gene e linhagens de pseudogene dentro de uma borda de árvore de espécie é modelada por um processo de nascimento-morte. Uma linhagem de genes / pseudogenos pode se deparar com um evento de duplicação, ou um evento de especiação. Uma linhagem genética (representada por linhagens Negras) pode converter-se em uma linhagem pseudogena (representada por linhagens castanhas). Cada vez que uma linhagem gene/pseudogeno passa por um evento de especiação, ela se divide em duas linhagens genéticas independentes. Uma linhagem genética também pode ser perdida. Após a poda de todas as linhagens perdidas, obtém-se a árvore genética final. Um relógio molecular relaxado é empregado para obter comprimentos de ramos. Finalmente, um modelo padrão de evolução de sequências gera sequências sobre a árvore genética com comprimentos de ramos. As cores verde e marrom representam a evolução da sequência de genes e pseudogenos, respectivamente.

a fim de obter um ambiente descontraído do relógio molecular, as taxas são amostrados de forma independente a partir de uma Γ-distribuição (parametrizada por uma média e uma variância) para cada borda, e uma borda com o tempo t e a taxa r é atribuído um comprimento l. Finalmente, as seqüências são evoluído ao longo deste gene-árvore com os seus comprimentos. Lembre-se que os eventos de pseudogenização introduzem dois vértices de grau na árvore genética. Sobre uma aresta onde o vértice parental é um gene um modelo de evolução de sequência adequado para genes é usado, enquanto quando o vértice parental representa um pseudogeno (e, consequentemente, também a criança representa um pseudogeno) um modelo de evolução de sequência adequado para pseudogenes é usado. Estes modelos podem ser variados, mas aqui usamos dois modelos de codon descritos abaixo.

A fim de modelar os dois modos de evolução da sequência, usamos duas matrizes de substituição de codon propostas por, uma para a evolução de pseudogenes e outra para a dos genes. O instantâneo taxa de substituição de matriz de códons i codão j, q ij é, em ambos os casos determinados por:

eu q j = 0 , se i e j diferentes em mais de uma posição em um codão trio μ π j , diferem por um sinônimo transversion µ κ π j , diferem por um sinónimo de transição μ ω π j , diferem por nonsynonymous transversion µ κ ω π j , diferem por um nonsynonymous transição

onde π j é o equilíbrio freqüência de códons j, m é um fator de normalização, κ é a transição/transversion relação, e ω é a não-sinônimo sinônimo de (dN/dS) a relação. Exceto a partir de ω, estes parâmetros são compartilhados entre os dois modos de evolução da sequência. Para os pseudogenes, ω é igual a 1 e a transição para parar codões é permitida, enquanto que para os genes a transição para parar o codão não é permitida.

the PrIME-PDLRS MCMC framework

PrIME-PDLRS is an MCMC based analysis tool for the above mentioned model. Toma como entrada um alinhamento de sequência múltipla de sequências de genes e pseudogenos, juntamente com uma classificação destas sequências como genes ou pseudogenes. Também requer uma espécie-árvore S. Vamos denotar uma árvore genética por G, Seu comprimento de borda por l, e outros parâmetros do modelo Por θ. O parâmetro θ é composto, contendo: a taxa de duplicação; taxa de perda; taxa de pseudogenização; média da taxa de borda e coeficiente de variação; e taxas não sinônimas de taxas sinônimas (dN/dS) e taxas de transição/transversão para o modelo de substituição de codões de evolução sequencial.

usaremos Ψ para denotar o conjunto de vértices de pseudogenização (grau dois) na árvore genética (nenhum destes vértices pode estar na mesma raiz para o caminho das folhas). Nós usamos P (·) para denotar uma probabilidade e p (·) para denotar uma densidade de probabilidade.

um estado em nossa cadeia Markov é um quádruplo (G, l, θ, Ψ). As folhas na árvore genética correspondem às sequências dadas e qualquer sequência classificada como pseudogeno deve ter um ancestral em G que pertence a Ψ. Quando o estado actual (G, l, θ, Ψ), a probabilidade de aceitação de uma proposta de estado ( G ‘, l ‘, θ ‘, ψ ‘) , é determinado pela razão entre p(G, l, θ, Ψ| D, S) e p ( G ‘, l ‘, θ ‘, ψ ‘ | D , S ) , onde D é o dado de dados e S é a espécie de árvore com o tempo. Desde que cada uma dessas densidades podem ser expressos por meio de Bayes igualdade, por exemplo,

p ( G , l , θ , ψ | D , S ) = P ( D | G , l , ψ ) p ( G , l , ψ | θ , S ) p ( θ ) P ( D | S ) ,

os dois denominadores P(D|S) na aceitação de probabilidade cancelar e obtemos

p ( G , l , θ , ψ | D , S ) p ( G ‘, l ‘, θ ‘, ψ ‘| D , S ) = P ( D | G , l , ψ ) p ( G , l , ψ | θ , S ) p ( θ ) P ( D | G ‘, l ‘, ψ ‘) p ( G ‘, l ‘ , ψ ‘| θ ‘, S ) p ( θ ‘ ) .

Aqui o numerador e o denominador têm a mesma estrutura, por isso é suficiente descrever como calcular o primeiro. Primeiro, o fator P (D|G, l, Ψ) pode ser calculado usando o algoritmo de programação dinâmica (DP) proposto por Felsenstein . As arestas e partes das arestas para as quais deve ser utilizado o gene ou o modo pseudogeno de evolução da sequência são especificadas Por Ψ. As frequências de equilíbrio são estimadas a partir das sequências de genes e pseudogenos, e são compartilhadas por ambos os modelos de evolução de seqüências. Em segundo lugar, o P(θ) anterior é escolhido para que possa ser facilmente computado. Finalmente, a principal contribuição técnica de é um algoritmo DP para calcular a probabilidade de uma árvore genética e seus comprimentos de aresta dados parâmetros e a árvore de espécies sob o modelo DL. A fim de computar p (G, l, θ, Ψ|D, s), propomos um novo algoritmo DP que integra o processo de pseudogenização e o processo DL.

In, a DP algorithm for computing the factor p(G, l|θ, s) was described. Vamos primeiro definir alguns conceitos-chave. Vamos ser uma árvore de espécies discretizadas onde as arestas da árvore de espécies S foram aumentadas com vértices de discretização adicional tal que todos os vértices aumentados são equidistantes dentro de uma aresta, ver figura S1 no arquivo adicional 1. O DP faz uso de uma tabela, s(x, y, u), definida como a probabilidade de que, quando um único gene linhagem começa a evoluir no vértice x∈V ( S ‘) , a árvore de G u (gene-árvore enraizada em u, juntamente com o parental borda de u) é gerado juntamente com a borda comprimentos especificados por l e, além disso, o evento correspondente a u ocorre em y∈V ( S ‘ ) . Que v e w sejam filhos de u Em G, e que x, y e z sejam vértices de V(S’).

Let ρ (r) be the probability that an edge of G has rate R. Also, let t(x, y) be the time between vertices x,y∈V ( s’). Deixe σ(u) seja a função definida da seguinte forma (i) para uma folha u∈L ( G ) , σ (u) é a espécie de árvore de folha em que o gene que u representa pode ser encontrado e (ii) para qualquer vértice u de G, σ (u) é o mais recente ancestral comum de L(G u ) em S. usamos p11(x, y) para denotar a probabilidade de um gene linhagem evolutiva “1-para-1” entre dois pontos na espécie de árvore, i.é., um único gene que começa em x, para alguns K dá origem a K linhagens em y dos quais k – 1 vai extinguir-se e uma linhagem genética pode ou não ser extinta. Nós usamos p 11 ψ ( x , y ) para denotar a probabilidade de um pseudogene evolução “1-para-1” entre dois pontos x e y em a espécie de árvore, por exemplo, que um único pseudogene começando em x, para algum k dá origem a k pseudogene linhagens em y de que k – 1 de extinção e de uma linhagem que pode ou não entrar em extinção. Um vértice U∈V ( T ) é chamado de pseudogeno se tem um ancestral que pertence a todos os vértices que representam eventos de pseudogenização Ψ têm grau dois. Como calcular estas probabilidades “1-a-1” é descrito no ficheiro adicional 1. As seguintes recursões descrevem como a tabela s pode ser computada usando programação dinâmica:

1 Se u∈L ( G ) E x = σ(u), s(x, x, u) = 1.

2 Se x ≠ V ( S ) e x ≠ σ(u), s(x, x, u) = 0.

3, Se x∈V ( S ) \L ( S ) ,u∉ψ, e x = σ(u),

s ( x , x , u ) = ∑ y ∈ D L ( x ) s ( x , y , v ) ∑ y ∈ D R ( x ) s ( x , y , w ) ,

, onde D L (x) e D R (x) são os descendentes de o esquerdo e o direito da criança de x em S’, respectivamente.

4, Se x∈V ( S ‘ ) \V ( S ) e u∉ψ

s ( x , x , u ) =2δ ∑ y ∈ D ( x ) \ { x } s ( x , y , v ) ∑ y ∈ D ( x ) \ { x } s ( x , y , w ) ,

, onde D(x) é o conjunto de descendentes de x.

5 Se x∈V ( S ) , pai de u (i.e. p(u)) não é um pseudogene, e z é filho de x tal que σ ( L ( G ) ) ⊆K ( S, z ) e z é ancestral de y e, em seguida,

s ( x , y , u ) = p 11 ( x , z ) ε ( x , z ) ρ ( l ( p ( u ) , u ) / t ( x , y ) ) ρ ( l ( p ( u ) , u ) / t ( z , y ) ) s ( z , y , u ) ,

onde ε ( x , z ) é a probabilidade de que um gene linhagem começando em x não chegar a qualquer folha l∈L ( S, x ‘) \L ( S, z ‘ ) . No entanto, se, além disso, y é filho de x as expressões acima para reduzir,

s ( x , y , u ) = p 11 ( x , y ) ε ( x , y ) ρ ( l ( p ( u ) , u ) / t ( x , y ) ) s ( y , y , u ) .

6 Se x∈V ( S ) , p(u) é um pseudogene, e z é filho de x tal que σ ( L ( G ) ) ⊆L ( S z ) e z é ancestral de y e, em seguida,

s ( x , y , u ) = p 11 ψ ( x , z ) ε ( x , z ) ρ ( l ( p ( u ) , u ) / t ( x , y ) ) ρ ( l ( p ( u ) , u ) / t ( z , y ) ) .

no Entanto, se, além disso, y é filho de x as expressões acima para reduzir,

s ( x , y , u ) = p 11 ψ ( x , y ) ε ( x , y ) ρ ( l ( p ( u ) , u ) / t ( x , y ) ) s ( y , y , u ) .

a probabilidade de que o gene-árvore G é gerado é a probabilidade de que quando uma única linhagem começa na raiz de S, o único filho c da raiz de G ocorre em algum lugar abaixo do grau Um raiz ρ De S, e então o processo continua e gera G. Assim,

p ( G , l | θ , ψ , S ) = ∑ y ∈ D ( ρ ) s ( ρ , y , c ) ,

, onde D(ρ) é o conjunto de descendentes de p.

Amostragem d-realizações

para mapear o pseudogenization vértices os vértices de discretizada espécies de árvore-S’, usamos o algoritmo de programação dinâmica proposta no . Ao suprimir os vértices de pseudogenização Ψ de um gene-árvore G (isto é, removendo cada grau-dois vértices e fazendo seus endpoints adjacentes), obtemos um gene-árvore g*. The sampling algorithm introduced in is used to map the vertices of the gene-tree V (G*) to the vertices of the discretized species-tree V(S’) (see Additional File 1). Os pontos de tempo associados com os vértices da árvore-espécie discretizada, induzem uma associação de pontos de tempo para os vértices de G*. Uma vez que os pontos de tempo foram associados com o vértice parental e o vértice infantil de um vértice de pseudogenização u de G, Um ponto de tempo pode ser facilmente associado com u, usando o comprimento do ramo das arestas incidentes.

comparando configurações de pseudogenização

estamos interessados em quantificar a diferença entre duas configurações de pseudogenização g juntamente com ψ e G’ juntamente com ψ’ de uma única família de genes. Observe que se suprimirmos os vértices ψ Em G e ψ’ Em G’ (i.e., removermos cada um desses vértices grau-dois e fizermos seus pontos finais tornarem-se adjacentes), respectivamente, então a mesma árvore g* é obtida. Seja e ψ e e ψ ‘o conjunto de arestas de G* introduzido pela supressão de ψ e ψ’, respectivamente. Se a aresta e ∈ E (G*) Foi criada pela supressão de u, então u é chamada de origem de E.

Notice, para qualquer aresta f Em E ψ OU e ψ’ , todas as folhas abaixo de F são pseudogenes. Então, se f ∈ e ψ, então existem ou bordas de e ψ’ abaixo de F em qualquer caminho de f para as folhas abaixo dela ou há uma aresta acima de F que pertence a e ψ’ . No primeiro caso, chamamos f Um Telhado e as bordas de e ψ’ Sua sombra. Neste último caso, a borda de e ψ ‘ é chamada um telhado e f pertence à sua sombra.

a primeira distância, a distância da aresta, ignora o tempo e é em vez disso definida com base na Distância em G*. Para cada par de arestas de G*, Há um caminho mais curto único que os contém; a distância entre duas dessas arestas é definida como sendo o número de vértices internos nesse caminho.em primeiro lugar, definimos duas distâncias topológicas (Figura 2). A distância de aresta entre dois vértices de pseudogenização a ψ e B ψ’ onde a ψ , b ψ São origens das arestas e a e e b , respectivamente, tal que e a , e b ∈ E(G∗), é definido como o caminho de comprimento mínimo entre e a e e b Em G∗. Para cada aresta do telhado f ψ e ψ Ou F ∈ E ψ’, seja d m (f) E d a (e) a distância máxima do bordo e a distância média do bordo, respectivamente, entre f e as arestas da sua sombra. Que a distância topológica máxima D m e a distância topológica média D A Entre G, ψ e G’, ψ’ seja o máximo de D m (f ) e a média de d A (f ), respectivamente, em todos os telhados F ∈ E ψ ∪ e ψ’ . Let the true gene tree and its pseudogenization vertices be (G, ψ) and q be the posterior probability distribution. Finalmente, calculamos a média esperada E D a e máxima média M D uma das distâncias topológicas como:

Figura 2
a figura2

Topológica das Distâncias entre os dois pseudogenization configurações, D a = ((1 + 1) / 2 + (1 + 2 + 2) / 3) / 2, D m = max ( max (1 , 1) , max (1 , 2 , 2)).

E D a (G , Ψ ) , q ) = ∑ G ‘, Ψ ‘D a (G , Ψ ) , ( G ‘, Ψ ‘) ) q ( G ‘, Ψ ) M D a (G , Ψ ) , q ) = max G ‘ , Ψ ‘D a (G , Ψ ) , ( G ‘, Ψ ‘) ) q ( G ‘ , Ψ )

também definimos o máximo esperado E D m e máximo máximo M D a e o m das distâncias topológicas como:

E D m (G , Ψ ) , q ) = ∑ G ‘, Ψ ‘D m (G , Ψ ) , ( G ‘, Ψ ‘) ) q ( G ‘, Ψ ) M D m (G , Ψ ) , q ) = max G ‘, Ψ ‘D m (G , Ψ ) , ( G ‘, Ψ ‘) ) q ( G ‘ , Ψ )

em Segundo lugar, vamos definir o que é temporal distâncias. Estes são obtidos analogamente ao topológico, mas em vez de usar as arestas distâncias entre os telhados e seus tons, usamos as distâncias temporais entre o tempo associado com a origem de um telhado e o tempo associado com as origens de sua sombra.

a distância topológica mede a distância de um vértice de pseudogenização verdadeiro a partir do vértice inferido ao longo da topologia da árvore genética, enquanto a distância temporal mede a distância entre os tempos (ao longo da árvore das espécies) associados com o vértice de pseudogenização verdadeiro e o vértice inferido.

análise sintética e biológica

testámos o nosso método PrIME-PDLRS em dados sintéticos e aplicámo-lo a dados biológicos. Primeiro descrevemos os testes em dados sintéticos. Árvores genéticas aleatórias com comprimentos de aresta e vértices de pseudogenização foram geradas usando uma versão modificada do gerador de árvores-Prime com taxa de pseudogenização de 0,5, e taxas biologicamente realistas de duplicação-perda observadas pela análise de famílias de genes de dataset óptico . As sequências genéticas foram geradas de acordo com o modelo PDLRS. Sequências de genes foram evoluídas usando matrizes de substituição de codon como proposto por Bielawski et al. . Uma matriz neutra de substituição de codon foi usada para a evolução de pseudogenes onde a razão de taxa de substituições não-sinônimas de sinônimos (dN/dS) foi definida para 1.0. No modelo neutro de substituição de codon, qualquer codon poderia ser substituído por um codon de parada, enquanto isso não era possível sob o modelo de substituição usado no caso da evolução genética. Vinte e cinco combinações diferentes de rácios de taxa dN/dS e rácios de taxa de transição/transversão foram usadas para gerar sequências de genes em vinte e cinco famílias de genes, usando frequências de equilíbrio de codões uniformes. A fim de simular um biologicamente realistas cenário, foi utilizada a espécie de árvore (obtido como no de nove espécies de vertebrados da ÓTICA de conjunto de dados, o que foi baixado a partir de http://genserv.anat.ox.ac.uk/downloads/clades/ A inferir pseudogenization vértices foram, então, comparados com o verdadeiro pseudogenization vértices usando dois tipos de métricas de distância, i.e. distância topológica (gene-árvore), e a distância temporal (espécie de árvore).

os conjuntos de dados biológicos consistiam em sub-famílias das duas maiores famílias de genes de vertebrados, ou seja, receptores olfativos e dedos de zinco. Os receptores olfativos têm sido relatados como sendo a maior família de genes nos vertebrados . Em espécies como a vaca, o ornitorrinco e os primatas, foi observada uma elevada taxa de pseudogenização, enquanto que o opossum, cães, ratinhos e ratos têm uma taxa relativamente baixa de pseudogenização . Sete famílias de sub-genes, de preferência com pelo menos um pseudogeno por espécie, foram descarregados de http://bioportal.weizmann.ac.il/HORDE/ para as espécies humanas (Homo sapiens), cães (Canis lupus familiaris), opossum (Didelphis virginiana) e platypus (Ornithorhynchus anatinus). Duas famílias sub-genes de dedos de zinco também foram estudadas através de espécies humanas (Homo sapiens), chimpanzé (Pan troglodytes), orangotango (Pongo abelii) e rhesus macaque (Macaca mulatta). Para este propósito, escolhemos duas sub-famílias dos genes ortólogos de alta confiança (que são suportados por OrthoMCL , reciprocal best BLAST hits, e synteny). Os genes paralógicos / progenitores correspondentes foram pesquisados usando PSI-BLAST e extraídos de http://ensembl.org. The high confidence orthologous genes were downloaded from ‘the KZNF catalog’ (http://znf.igb.illinois.edu) . Como os pseudogenes na família de genes do dedo de zinco evoluíram principalmente como resultado de duplicações fragmentadas , é desafiador alinhar corretamente os pseudogenes e genes correspondentes, claramente uma condição necessária para a reconstrução da árvore genética. Alinhamentos das nove famílias de sub-genes foram curados manualmente depois de alinhá-los com MACSE , permitindo parar codões e introduzindo penalidades para a criação de uma lacuna (-7), estendendo uma lacuna (-1), e introduzindo frameshift (-14). The dated species-trees for both the biological datasets were downloaded from http://timetree.org. As sub-famílias de genes foram então analisadas usando o mesmo gasoduto usado para análise sintética. As potenciais árvores de genes foram reconstruídas usando Dlrs PrIME, que foram então analisadas por PDLRS PrIME usando a opção de árvore de genes fixa. A árvore genética PrIME-DLRS com melhor estado PrIME-PDLRS com maior probabilidade posterior foi selecionada como a árvore genética mais provável. Os eventos posteriores sobre pseudogenização das árvores genéticas mais prováveis foram então analisados usando as realizações detalhadas geradas durante a cadeia de Markov traversal.

MCMC Analysis

Bayesian analysis was performed for the gene families using MCMC based analysis tool, PrIME-PDLRS. A cadeia MCMC foi configurada para integrar sobre todos os parâmetros, ou seja, árvore de genes, comprimentos de aresta, vértices de pseudogenização em árvore de genes, taxas de nascimento-morte e pseudogenização, e média e variância das taxas de substituição de aresta. Nós amostramos diferentes parâmetros ao longo do processo MCMC, incluindo taxas de natalidade-morte, taxa de pseudogenização, gene-árvore, vértices de pseudogenização, taxa de dN/dS, e taxa de transição/transversão. Um ou mais parâmetros foram perturbados em cada iteração. A perturbação da Árvore Genealógica foi feita usando métodos padrão de perturbação da árvore genealógica, tais como Poda de subárvore e regrafting, intercâmbio de vizinhos mais próximo e re-enraizamento. Após uma perturbação, a validade da árvore genética resultante foi certificada, ou seja, nenhuma linhagem pseudogena leva a uma linhagem genética. Uma árvore genética perturbada válida é proposta, cada vez que uma árvore genética é proposta. O método de junção de vizinhos é usado para construir a árvore inicial no início da cadeia MCMC. A distribuição proposta propõe movimentos de vértices de pseudogenização, através das linhagens de um gene-árvore, de uma maneira tal que a probabilidade de propor um movimento ascendente de um vértice de pseudogenização é igual à probabilidade de propor um movimento descendente. Os rácios de taxa dN/dS são amostrados a partir de uma distribuição normal truncada em , enquanto os rácios de taxa de transição/conversão são amostrados a partir de uma distribuição normal truncada em . As taxas de natalidade-morte e pseudogenização são amostradas a partir de uma distribuição normal truncada em . Propostas normais truncadas foram usadas para a perturbação dos parâmetros do modelo de taxa e comprimentos de aresta em torno do valor atual, com parâmetros de ajuste artesanais em relação aos rácios de aceitação. Os parâmetros da taxa de substituição foram perturbados quer pela alteração da média de distribuição quer pelo coeficiente de variação. A fim de descobrir se as cadeias MCMC convergiram, nós usamos VMCMC como uma ferramenta de diagnóstico. A partir das corridas iniciais, observou-se que era seguro usar um período de queima de 2,500,000. Para o resto das corridas, usámos 5.000.000 iterações, período de queima de 2.500.000 e de desbaste de 500. Usámos PrIME-DLRS como primeiro passo para reconstruir as potenciais árvores genéticas. Cada árvore genética potencial foi analisada usando PDLRS PrIME com uma opção gene-árvore fixa.

Deixe uma resposta

O seu endereço de email não será publicado.