Passeio aleatório nas bordas de um cubo


35

Uma formiga é colocada no canto de um cubo e não pode se mover. Uma aranha começa no canto oposto e pode se mover pelas bordas do cubo em qualquer direção com igual probabilidade . Em média, quantos passos a aranha precisará para chegar à formiga?(x,y,z)1/3

(Isso não é tarefa de casa, foi uma pergunta de entrevista.)


7
Dever de casa? O que você tentou até agora?
Adrian

Em relação a cadeias de Markov, aqui é uma ótima introdução setosa.io/blog/2014/07/26/markov-chains
DL Dahly

11
Normalmente, esse tipo de livraria de rotina deve ser marcada com a self-studytag e seguir as diretrizes no wiki da tag . Edite esta questão e inclua-a em futuras perguntas semelhantes.
Glen_b -Reinstate Monica

4
@GarethMcCaughan - Não, era uma pergunta de entrevista.
Elizabeth Susan Joseph

Seguindo @alesc, criei um Plunker JavaScript. plnkr.co/edit/jYQVDI
abbaf33f

Respostas:


32

Sugiro modelar o problema como uma cadeia de Markov, onde cada estado representa a distância entre a aranha e a formiga. Nesse caso, temos 4 estados possíveis pois as distâncias podem ser .SEuEu{0 0,1 1,2,3}

Quando a aranha está no canto oposto do cubo, fica a uma distância de 3 passos da formiga. Está no estado .S3

Construindo a matriz de transição .P

  • Se desenharmos um cubo, veremos que, quando estamos no estado , todo movimento reduz a distância entre a aranha e a formiga para 2 passos. Portanto, quando estamos no estado passamos para o estado com probabilidade 1.S 3 S 2S3S3S2

  • Quando estamos no estado , podemos voltar ao estado usando a aresta que chegamos de lá ou podemos diminuir a distância para apenas um passo se escolhermos outras duas arestas. Portanto, quando estamos no estado , podemos passar para o estado com probabilidade 2/3 e para o estado com probabilidade 1/3.S 3 S 2 S 1 S 3S2S3S2S1 1S3

  • Quando estamos no estado , podemos ir para o estado usando uma das três arestas possíveis. Se usarmos os outros dois, voltaremos ao estado . Portanto, quando estamos no estado , podemos passar para o estado com probabilidade 1/3 e para o estado com probabilidade 2/3.S 0 S 2 S 1 S 0 S 2S1 1S0 0S2S1 1S0 0S2

  • Quando chegamos ao estado , ficamos lá, pois é nosso objetivo. é um estado absorvente.S 0S0 0S0 0

P=[PS3S3PS3S2PS3S1 1PS3S0 0PS2S3PS2S2PS2S1 1PS2S0 0PS1 1S3PS1 1S2PS1 1S1 1PS1 1S0 0PS0 0S3PS0 0S2PS0 0S1 1PS0 0S0 0]=[0 01 10 00 01 1/30 02/30 00 02/30 01 1/30 00 00 01 1]

Esta é uma cadeia de Markov absorvente com três estados transitórios ( , , ) e um estado absorvente ( ).S 2 S 1 S 0S3S2S1 1S0 0

De acordo com a teoria, a matriz de transição de uma cadeia de Markov com estados transitórios e absorção estados pode ser reescrita como: r P = [ Q t R 0 r × t I r ]tr

P=[QtR0 0r×tEur]

onde é uma matriz que mostra a probabilidade de fazer a transição de um estado transitório para outro estado transitório, enquanto é uma matriz com as probabilidades de fazer a transição de um dos os estados transitórios para um dos estados absorventes . A matriz de identidade nos mostra que, quando qualquer estado absorvente de é atingido, não há transição para esse estado. A matriz todos os zeros pode ser interpretada como se não houvesse transição de nenhum dos estados de absorção de para nenhum dos t×t R t×rtr I r r 0 r × t rtQtt×tRt×rtrEurr0 0r×trt estados transitórios.

A entrada de representa probabilidade de transição de um estado para um estado em exatamente uma etapa. Para obter a probabilidade de etapas, precisamos da entrada de . Somando-se para todo , obtemos uma matriz que contém em sua entrada o número esperado de visitas ao estado transitório após iniciar a partir do estado transitório .Q t i j k ( i , j ) Q k t k ( i , j ) j i(Eu,j)QtEujk(Eu,j)Qtkk(Eu,j)jEu

k=0 0Qtk=(Eut-Qt)-1 1

Para obter o número de etapas até a absorção, basta somar os valores de cada linha de . Isso pode ser representado por(Eut-Qt)-1 1

t=(Eut-Qt)-1 11 1

onde é um vetor de coluna com todos os componentes iguais a 1.1 1

Vamos aplicar isso ao nosso caso:

Como afirmado acima, em nosso caso, temos = 3 estados transitórios = 1 estado absorvente, portanto: r Q t = [ 0 1 0 1 / 3 0 2 / 3 0 2 / 3 0 ]tr

Qt=[0 01 10 01 1/30 02/30 02/30 0]R=[0 00 01 1/3]

A matriz com o número esperado de visitas é

(Eut-Qt)-1 1=[2.54.531.54.531 133]

Essa matriz pode ser interpretada da seguinte maneira. A partir do estado e antes de ser absorvido em , visitamos, em média, 2,5 vezes, 4,5 vezes e 3 vezes.S 0 S 3 S 2 S 1S3S0 0S3S2S1 1

O número esperado de etapas do estado ao estado é fornecido pelo primeiro componente do seguinte vetor:S 0S3S0 0

t=[2.54.531.54.531 133][1 11 11 1]=[1097].

O segundo e o terceiro componentes de são o número esperado de etapas para se começarmos de e respectivamente.S 0 S 2 S 1tS0 0S2S1 1


Não tenho ideia do que é o mcmc. Eu tenho que lê-lo e depois verificar sua solução. Existe alguma boa explicação do mcmc que complemente sua solução?
Elizabeth Susan Joseph

10
@ElizabethSusanJoseph Observe que as cadeias de Markov e o MCMC (cadeia de Markov Monte Carlo) são dois conceitos distintos (embora o MCMC seja baseado em cadeias de Markov). Esta resposta não usa o MCMC para nada. Então você provavelmente está procurando uma boa explicação sobre cadeias de Markov, não sobre o MCMC.
Juho Kokkala

tiagotvv sua explicação seria melhorada definindo e explicando o uso da matriz de transição P , o significado da quantidade r e a altura do vetor da coluna. Pontos de bônus pelo significado dos elementos subsequentes do vetor t . :)
Alexis

@JuhoKokkala - obrigado, em seguida, examinarei as explicações da cadeia de markov.
Elizabeth Susan Joseph

@ Alexis Adicionei algumas explicações sobre as matrizes e vetores.
Tiagotvv

21

Seja o número de etapas esperadas. Seja o número de etapas esperadas de qualquer canto adjacente à origem da aranha e mesmo para a formiga.x 1 x 0xx1 1x0 0

Então e . Como x 0 = 1 + 2x=1 1+x1 1x1=1+2x0 0=1 1+23x1 1

x1 1=1 1+23x0 0+1 13x=1 1+23x0 0+1 13+1 13x1 1

temos que . Portanto, implicando que e .x 0 = 1 + 2x1 1=x0 0+2 x0=7x1=9x0 0=1 1+23x0 0+43x0 0=7x1 1=9

Nós obtemos nossa resposta como .x=10

Editar:

Se desenharmos o cubo com coordenadas , é a posição inicial da aranha e a posição da formiga.111 000(x,y,z)111000

A aranha pode se mover para , ou .101 110011101110

Pela simetria do cubo, eles devem ter o mesmo número de etapas esperadas para a formiga, denotadas por . A partir de , podemos retornar à origem (com probabilidade ) ou (com probabilidade ), podemos ir para um dos pontos , , , dependendo do estado em que estamos.x 1 1 / 3 2 / 3 001 100 010x1 1x1 11 1/32/3001100010

Novamente, por simetria, esses pontos terão o mesmo número de etapas esperadas que chamamos de . A partir dessas posições, podemos alcançar a meta em uma etapa com probabilidade ou voltar para uma das posições com probabilidade . Isso significa que . 1 / 3 x 1 2 / 3 x 0 = 1x0 01 1/3x1 12/3x0 0=1 131 1+23(1 1+x1 1)=1 1+23x1 1


Você poderia elaborar mais a sua resposta? Por favor, explique em termos leigos :)
Elizabeth Susan Joseph

17

Uma boa abstração para pensar é:

Pense na posição da formiga como e aranha , agora cada movimento que a aranha pode fazer alternará basicamente exatamente um dos três componentes de ou . Então a pergunta se torna:( 1 , 1 , 1 ) 1 0 0 1(0,0,0)(1,1,1)1001

If I randomly switch bits in (1,1,1) after how many steps in average do I get 0,0,0

Vemos que o caminho mais curto são 3 interruptores. Uma vez que não importa com que bit eu começo, a probabilidade disso acontecer é 1 * 2/3 * 1/3 = 2/9. Se cometermos um erro (volte um pouco para 1), precisaremos de 5 etapas. E as chances de cometer um erro são 7/9 - se queremos cometer apenas um erro, temos que voltar de lá e fazer tudo certo de novo - então a chance de cometer exatamente 1 erro resultando em 5 etapas é 7/9 * 2/9e a chance de cometer 2 erros, também conhecidos como 7 passos, (7/9)² * 2/9e assim por diante.

Portanto, a fórmula para o número médio esperado de etapas é:

E(steps)=n=0(3+2n)29(79)n=10

Sua solução é um pouco confusa. O que é essa fórmula? o que é n aqui?
Elizabeth Susan Joseph

5
Na verdade, é a solução mais curta e mais limpa. A solução está na forma de uma soma infinita de números de zero ao infinito e né o número inteiro atual nessa soma infinita.
alesc 27/02

Isso é muito legal! Minha resposta é semelhante, mas divide a sequência de comutadores em pares - o que me permite esperar uma variável geométrica (ou alternativamente, somar uma série geométrica) em vez de somar uma série aritmético-geométrica . Essa é a única diferença substantiva: não importa muito se alguém recebe "três primeiros interruptores, depois pares subsequentes" (como você fez) ou "primeiro comutador, depois pares subsequentes" (como eu), desde que, a menos que a mosca seja capturada em três opções, então, de qualquer maneira, você está lidando com uma paridade ímpar e duas pares.
Silverfish 28/02

16

Apenas para complementar a resposta de tiagotvv:

Naturalmente, não penso nesses tipos de problemas como matrizes (mesmo que sejam). Eu tenho que desenhar, o que eu fiz abaixo. Você pode ver que há 3 lugares para se deslocar de S, todos os quais são. De qualquer A, você pode retornar ao S ou mudar para um dos dois Bs. De qualquer B, você pode mover para o E ou para um dos dois. Tudo isso se traduz na matriz de transição fornecida por tiagotvv, que também pode ser desenhada em forma de gráfico.

insira a descrição da imagem aqui

Como sou péssimo em matemática, tentaria simular seu problema. Você pode fazer isso com o pacote markovchain em R.

  library(markovchain)
  library(ggplot2)

  # Create a markovchain object, given the states and their transition matrix

  mcCube <- new("markovchain", 
                states = c("S", "A", "B", "E"),
                transitionMatrix = matrix(data = c(0,   1,   0,   0,
                                                   1/3, 0,   2/3, 0,
                                                   0,   2/3, 0,   1/3,
                                                   0,   0,   0,   1), 
                                          byrow = T, nrow = 4),
                name = "cube")

  # The following code calcuates the probability of landing on E after taking
  # between 1 and 100 steps from the start, given the above set of transition
  # probabilities.

  start <- c(1, 0, 0, 0)

  list <- list()

  for (i in 1:100){

    list[[i]] <- (start * mcCube^i)[4] 

  }

   a <- do.call(rbind, list)

   data <- data.frame(propE = a, 
                      steps = c(1:100))

   ggplot(data, aes(x = steps, y = propE)) +
    geom_line(size = 1) +
    ylab("Probability you reached the spider") +
    xlab("Number of steps taken") +
    theme_bw() +
    theme(panel.grid.minor = element_blank())

insira a descrição da imagem aqui

  # This code simulates 1000 different applications of the markov chain where you 
  # take 1000 steps, and records the step at which you landed on E

  list <- list()
  for (i in 1:1000) {


    b <- rmarkovchain(n = 1000, object = mcCube, t0 = "S", include.t0 = T)

    list[[i]] <- 1001 - length(b[b == "E"])

  }

  data <- as.data.frame(do.call(rbind, list))

  ggplot(data, aes(x = V1)) +
    geom_density(fill = "grey50", alpha = 0.5) +
    geom_vline(aes(xintercept = mean(V1))) +
    ylab("Density") +
    xlab("Number of steps to reach E") +
    theme_bw() +
    theme(panel.grid.minor = element_blank())

  mean(data$V1)  # ~10 is the average number of steps to reach E in this set of
                 # simulations

insira a descrição da imagem aqui

A resposta de tiagotvv pode ser calculada em R como:

q = matrix(c(0,   1,   0,   
             1/3, 0,   2/3, 
             0,   2/3, 0), byrow = T, nrow = 3)


(solve(diag(3) - q) %*% c(1, 1, 1))[1] # = 10

11

As considerações de paridade fornecem uma solução muito limpa, usando máquinas surpreendentemente simples: sem cadeias de Markov, sem expectativas iteradas e apenas resumos do ensino médio. A idéia básica é que, se a aranha se moveu um número par de vezes na direção , ela retornou à sua coordenada original portanto, não pode estar na posição da formiga. Se ele se moveu um número ímpar de vezes na direção , então sua coordenada corresponde à da formiga. Apenas se tiver movido um número ímpar de vezes em todas as três direcções que vai coincidir com os , e coordenadas do formiga.x x x x y zxxxxxyz

Inicialmente, a aranha fez zero movimentos em qualquer uma das três direções, então a paridade para cada direção é uniforme. Todas as três paridades precisam ser invertidas para alcançar a formiga.

Após o primeiro movimento da aranha (vamos rotular essa direção como ), exatamente uma direção tem paridade ímpar e as outras duas ( e ) são pares. Para pegar a formiga, apenas essas duas paridades precisam ser revertidas. Como isso não pode ser alcançado em um número ímpar de movimentos subsequentes, a partir de agora consideramos pares de movimentos. Existem nove combinações possíveis para a primeira jogada emparelhada:y zxyz

(x,x),(x,y),(x,z),(y,x),(y,y),(y,z),(z,x),(z,y),ou(z,z)

Precisamos nos mover nas direções e para alcançar a formiga após um movimento emparelhado, e duas de nove combinações conseguirão isso: e garantiriam que as três paridades sejam ímpares.yz(y,z)(z,y)

As outras sete combinações deixam uma paridade ímpar e duas pares. Os três movimentos repetidos, , ou , mantêm todas as paridades inalteradas, de modo que ainda precisamos de um movimento de e um para alcançar a formiga. Os outros pares contêm dois movimentos distintos, incluindo um na direção . Isso muda a paridade de e uma das outras paridades ( ou ), então ainda temos uma paridade ímpar e duas par. Por exemplo, o par nos deixa precisando de mais um e mais um(x,x)(y,y)(z,z)yzxxyz(x,z)xyalcançar a formiga: uma situação equivalente (após a rotulagem dos eixos) para onde estávamos antes. Podemos então analisar o próximo movimento emparelhado da mesma maneira.

Em geral, os movimentos pareados começam com uma paridade ímpar e duas pares, e terminam com três paridades ímpares (com probabilidade ) e a captura imediata da formiga, ou com uma paridade ímpar e duas pares ( com probabilidade ), que nos retorna à mesma situação.2979

Seja o número de movimentos emparelhados necessários para alcançar a formiga. Claramente segue a distribuição geométrica no suporte com probabilidade de sucesso portanto, tem a média . Seja o número total de movimentos necessários, incluindo o movimento inicial e os movimentos emparelhados subsequentes. Então , aplicando linearidade das expectativas, .MM{1 1,2,3,...}p=29E(M)=p-1 1=92=4.5NMN=2M+1 1E(N)=2E(M)+1 1=2×4.5+1 1=10

Como alternativa, você pode observar e aplicar a fórmula conhecida para a média de uma distribuição discreta usando apenas valores inteiros não negativos , . Isso fornece que é uma série geométrica com o primeiro termo e comum razão portanto, soma . Podemos então pegar como antes.P(Mm)=(79)m-1 1E(M)=m=1 1P(Mm)E(M)=m=1 1(79)m-1 1uma=1 1r=79 uma1 1-r=1 11 1-7/9=1 12/9=92E(N)

Comparação com as soluções da cadeia Markov

Como eu pude perceber isso na matriz de transição em cadeia de Markov? Usando a notação de @ DLDahly, os estados na matriz de transição correspondem à minha descrição do número do número de direções com paridade ímpar.

Formiga de caça de aranha no cubo

A matriz de transição de uma etapa é

P=[PSSPSUMAPSBPSEPUMASPUMAUMAPUMABPUMAEPBSPBUMAPBBPBEPESPEUMAPEBPEE]=[0 01 10 00 01 1/30 02/30 00 02/30 01 1/30 00 00 01 1]

A primeira linha mostra que, após um movimento, é garantido que a aranha está no estado A (uma paridade ímpar e duas pares). A matriz de transição em duas etapas é:

P(2)=P2=[1 1/30 02/30 00 07/90 02/92/90 04/91 1/30 00 00 01 1]

A segunda linha mostra-nos que, uma vez que a aranha entrou no estado A, em dois movimentos, ela retornou ao estado A com probabilidade ou atingiu o estado E (todas as paridades ímpares) e capturou a formiga, com probabilidade . Assim, tendo atingido o estado A, vemos a partir da matriz de transição em duas etapas que o número necessário de movimentos em duas etapas pode ser analisado usando a distribuição geométrica como acima. Não foi assim que encontrei minha solução, mas às vezes vale a pena calcular os primeiros poderes da matriz de transição para ver se um padrão útil como esse pode ser explorado. Ocasionalmente, descobri que isso fornece soluções mais simples do que ter que inverter uma matriz ou executar uma composição automática manualmente - reconhecidamente algo que só é realmente relevante em uma situação de exame ou entrevista.7/92/9


2

Eu escrevi um pequeno programa Java para responder sua pergunta numericamente. A travessia da aranha é verdadeiramente aleatória, o que significa que ela também pode atravessar em ciclos antes de chegar à formiga.

No entanto, você não definiu o termo "canto oposto", por isso tenho dois cenários diferentes. Oposto como no mesmo plano ou no cubo. No primeiro cenário, o caminho mais curto é 2 etapas e 3 etapas no segundo cenário.

Eu usei 100 milhões de repetições e os resultados são os seguintes:

-- First scenario --
Steps sum: 900019866
Repeats: 100000000
Avg. step count: 9.00019866

-- Second scenario --
Steps sum: 1000000836
Repeats: 100000000
Avg. step count: 10.00000836

Código fonte:

import java.util.Random;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.IntStream;

public class ProbabilityQuizSpider {

    // Edges of the cube
    private static final int[][] EDGES = new int[][] {
            {1, 3, 7}, // corner 0
            {0, 2, 4}, // corner 1
            {1, 3, 5}, // corner 2
            {0, 2, 6}, // corner 3
            {1, 5, 7}, // corner 4
            {2, 4, 6}, // corner 5
            {3, 5, 7}, // corner 6
            {0, 4, 6}  // corner 7
    };

    private static final int START = 0; // Spider
    private static final int FINISH = 5; // Ant
    private static final int REPEATS = (int) Math.pow(10, 8);

    public static void main(String[] args) {

        final Random r = new Random();
        final AtomicLong stepsSum = new AtomicLong();

        IntStream.range(0, REPEATS).parallel().forEach(i -> {

            int currentPoint = START;
            int steps = 0;

            do {

                // Randomly traverse to next point
                currentPoint = EDGES[currentPoint][r.nextInt(3)];

                // Increase number of steps
                steps++;

            } while(currentPoint != FINISH);

            stepsSum.addAndGet(steps);

        });

        // Results
        System.out.println("Steps sum: " + stepsSum.get());
        System.out.println("Repeats: " + REPEATS);
        System.out.println("Avg. step count: " + (((double) stepsSum.get()) / ((double) REPEATS)));

    }

}

EDIT: corrigido um erro de digitação no script (e também atualizamos os resultados)


2
Eu acho que suas arestas estão erradas. O canto 3 tem 7 em sua lista, mas o canto 7 não possui 3 em sua lista. (Sugiro que a maneira correta de mapear os vértices para os números 0..7 é dizer que cada posição de bit corresponde a um eixo, de modo que atravessar uma aresta é igual a XOR com 1, 2 ou 4.)
Gareth McCaughan

11
Obrigado pelo comentário. Eu cometi um erro de digitação ao definir o canto 3, deveria ser {0, 2, 6}. Executei novamente o programa e obtive o seguinte resultado: 10.00000836 etapas para percorrer do canto 0 ao canto 5 (diagonal do corpo do cubo). Isso também é consistente com o @Hunaphu.
alesc

Sim, muito melhor.
Gareth McCaughan

2

Eu resolvi seu dilema através de simulações de Monte Carlo ( ) e obtive .n=104meuman(steps)10

Simulação de Monte Carlo ($ n = 10 ^ 4 $)

Aqui está o código R que eu usei:

ant = c(0,0,0) # ant's coordinates 

sim = 1e4 # number of MC simulations
steps = numeric() # initialize array of steps

for (i in 1:sim)
{
  spider = c(1,1,1) # spider's coordinates
  count = 0 # initialize step counter

  # while ant's coordinates == spider's coordinates
  while (!isTRUE(all.equal(ant, spider)))
  {

  # random walk in one of three dimensions
  xyz = trunc(runif(1,1,4))

  # let the spider move
  if (spider[xyz] == 1) 
    {
    spider[xyz] = 0
    } else if (spider[xyz] == 0) 
    {
    spider[xyz] = 1
    }

  # add one step
  count = count + 1
  }

# add the number of step occurred in the ith iteration
steps = c(steps, count)

# print i and number of steps occurred
cat("\n", i, " ::: ", count)
}

# print the mean of steps
(mean(steps))

9
O código é bom e claro - mas está pedindo a muitos usuários que assistam a um milhão de linhas impressas ao longo de meia hora! E como você sabe que a resposta correta não é, por exemplo, ? :-) FWIW, você pode explorar algumas funções nativas para acelerar isso em menos de um segundo:10.000001Rn.sim <- 1e6; x <- matrix(runif(n.sim*3), ncol=3); moves <- x >= pmax(x[, 1], x[, 2], x[, 3]); positions <- apply(moves, 2, cumsum) %% 2; types <- rowSums(positions); vertices <- types[types==0 | types==3]; transitions <- cumsum(diff(vertices) != 0); n.sim / transitions[length(transitions)]
whuber

-1

Acredito que o alesc está no caminho certo ao mencionar "No entanto, você não definiu o termo" canto oposto "A menos que esteja faltando alguma coisa na pergunta, não há resposta correta, apenas respostas baseadas em suposições. O tamanho do cubo não está definido IE 10 pés cúbicos, 1000 pés cúbicos etc. O tamanho da formiga não está definido IE pequeno jardim, carpinteiro, vermelho gigante etc, tipo Aranha não está definido (para determinar o tamanho da etapa) IE pequeno jardim, Tarântula etc. SE você combinar tudo "não definido "variáveis. a resposta pode ser 0 etapas ou um número indeterminado / infinito de etapas.


3
Essa resposta não levaria ao próximo nível de entrevista, a menos que fosse talvez para uma posição de jardinagem.
whuber

11
Nesse caso, é claro o suficiente que 'step' significa 'uma mudança de um nó (canto) para um nó adjacente', e é bem claro o que significa "canto oposto" de um cubo - por exemplo, um cubo de unidade - se a formiga está no canto (x, y, z) em um cubo unitário, a aranha está em (1-x, 1-y, 1-z) (portanto, se a formiga está na origem, a aranha está em (1,1 1)). Como tal, nenhuma de suas preocupações parece estar relacionada substancialmente à pergunta que está sendo feita. [Nota aos eleitores: Embora eu não ache que seja uma boa resposta sem uma edição substantiva, não acho que isso deva ser objeto de votação para exclusão - votos acima e abaixo são suficientes]
Glen_b -Reinstate Monica

@Glen_b Como parece estar buscando clareza sobre os detalhes da pergunta, achei que isso provavelmente deveria ser um comentário e não uma resposta substantiva.
Silverfish 28/02

11
@ Silverfish Você pode estar correto, mas depois fecha como 'não é uma resposta'. Eu o li como uma tentativa de dizer "esta pergunta não é responsável", que eu normalmente consideraria uma resposta quando apoiada no raciocínio, mas acho que os motivos são simplesmente baseados no mal-entendido da pergunta.
Glen_b -Reinstala Monica
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.