Questão

Uma moeda com probabilidade \(p\) de cara é lançada até que duas caras consecutivas ocorram. Qual é o número esperado de lançamentos para que isto aconteça?

Resposta

Teoria

Seja \(Y\) o número de lançamentos necessários para que uma coroa uma ocorra. Sabemos que: \[Y \sim Geo(q),\] em que \(q = 1 - p\). Logo, a fp de \(Y\) é dada por: \[\mathbb{P}(Y = y) = qp^{y-1}\underset{\{1, 2, ...\}}{\mathbb{I}(y)}.\]

Observe que estamos interessados no valor esperado de \(X\) que pode ser obtido a partir da esperança da esperança condicional de \(X\) dado que \(Y\) ocorreu: \[\mathbb{E}(X) = \mathbb{E}[\mathbb{E}(X|Y)].\]

Vamos entender a esperança condicional \(\mathbb{E}(X|Y)\). Se \(Y\) é igual a 1, então foi necessário um único lançamento para que ocorra coroa. Desse modo, a esperança condicional é: \[\mathbb{E}(X|Y = 1) = \mathbb{E}(1 + X) = 1 + \mathbb{E}(X),\] ou seja, adiciona 1 ao valor esperado de \(X\), já que ocorreu uma coroa, e reinicia todo o processo. Se \(Y\) é igual a 2, então foram necessários dois lançamentos para que ocorra uma coroa. Logo, a esperança condicional é: \[\mathbb{E}(X|Y = 2) = \mathbb{E}(2 + X) = 2 + \mathbb{E}(X),\]

ou seja, adiciona 2 ao valor esperado de \(X\), pois ocorreu uma cara e uma coroa, o que equivale a dois lançamentos sem ocorrer 2 caras consecutivas. Se o valor de \(Y\) é maior ou igual a 3, então necessariamente ocorreu duas ou mais caras, já que foram lançados mais que dois lançamentos sem ocorrer coroa. Desse modo, a esperança condicional é: \[\mathbb{E}(X|Y \geq 3) = 2.\]

Agora, com isso, podemos encontrar o valor esperado de \(X\): \[\begin{align*} \mathbb{E}(X) &= \mathbb{E}[\mathbb{E}(X|Y)]\\ &= \sum_{i=1}^\infty\mathbb{E}(X|Y = i)\mathbb{P}(Y = i)\\ &= \mathbb{E}(X|Y = 1)\mathbb{P}(Y = 1) + \mathbb{E}(X|Y = 2)\mathbb{P}(Y = 2) + \sum_{i=3}^\infty\mathbb{E}(X|Y = i)\mathbb{P}(Y = i)\\ &= (1 + \mathbb{E}(X))qp^{1-1} + (2 + \mathbb{E}(X))qp^{2-1} + 2\sum_{i=3}^\infty qp^{i-1}\\ &= (q + qp)\mathbb{E}(X) + q + 2qp + 2\frac{qp^2}{1 - p}\\ \mathbb{E}(X) - (1-p^2)\mathbb{E}(X) &= 1 - p + 2p - 2p^2 + 2\frac{qp^2}{q}\\ p^2\mathbb{E}(X) &= 1 + p\\ \mathbb{E}(X) &= \frac{1}{p^2} + \frac{1}{p}. \end{align*}\]

Agora vamos obter o segundo momento de \(X\). \[\begin{align*} \mathbb{E}(X^2) &= \mathbb{E}[\mathbb{E}(X^2|Y)]\\ &= \sum_{i=1}^\infty\mathbb{E}(X^2|Y = i)\mathbb{P}(Y = i)\\ &= \mathbb{E}(X^2|Y = 1)\mathbb{P}(Y = 1) + \mathbb{E}(X^2|Y = 2)\mathbb{P}(Y = 2) + \sum_{i=3}^\infty\mathbb{E}(X^2|Y = i)\mathbb{P}(Y = i)\\ &= \mathbb{E}[(1 + X)^2]q + \mathbb{E}[(2 + X)^2]qp + 2^2\sum_{i=3}^\infty qp^{i-1}\\ &= \mathbb{E}(1 + 2X + X^2)q + \mathbb{E}(4 + 4X + X^2)qp + 4\frac{qp^2}{1 - p}\\ &= [1 + 2\mathbb{E}(X) + \mathbb{E}(X^2)]q + [4 + 4\mathbb{E}(X) + \mathbb{E}(X^2)]qp + 4p^2\\ &= q + 4qp + 4p^2 + (2q + 4qp)\mathbb{E}(X) + (q + qp)\mathbb{E}(X^2)\\ \mathbb{E}(X^2) - (1 - p^2)\mathbb{E}(X^2) &= 1 - p + 4p - 4p^2 + 4p^2 + (2 - 2p + 4p - 4p^2)\bigg(\frac{1}{p^2} + \frac{1}{p}\bigg)\\ p^2\mathbb{E}(X^2) &= 1 + 3p + (2 + 2p - 4p^2)\frac{1}{p^2} + (2 + 2p - 4p^2)\frac{1}{p}\\ p^2\mathbb{E}(X^2) &= 1 + 3p + \frac{2}{p^2} + \frac{2}{p} - 4 + \frac{2}{p} + 2 - 4p\\ p^2\mathbb{E}(X^2) &= \frac{2}{p^2} + \frac{4}{p} - 1 - p \\ \mathbb{E}(X^2) &= \frac{2}{p^4} + \frac{4}{p^3} - \frac{1}{p^2} - \frac{1}{p}. \end{align*}\]

Com esses dois resultados podemos calcular a variância: \[\begin{align*} \mathbb{V}ar(X) &= \mathbb{E}(X^2) - [\mathbb{E}(X)]^2\\ &= \frac{2}{p^4} + \frac{4}{p^3} - \frac{1}{p^2} - \frac{1}{p} - \bigg(\frac{1}{p^2} + \frac{1}{p}\bigg)^2\\ &= \frac{2}{p^4} + \frac{4}{p^3} - \frac{1}{p^2} - \frac{1}{p} - \frac{1}{p^4} - 2\frac{1}{p^3} - \frac{1}{p^2}\\ &= \frac{1}{p^4} + \frac{2}{p^3} - \frac{2}{p^2} - \frac{1}{p}. \end{align*}\]

Computacional

Funções para gerar \(X\)

As seguintes funções geram a variável aleatória \(X\).

  • A função Xun Gera apenas um valor de \(X\).
  • A função X usa a função Xun para gerar \(n\) valores de \(X\).
Função Xun
Xun <- function(p) {
  # Y ~ Geom(1 - p): número de falhas (caras) até a primeira coroa
  Y <- rgeom(1, 1 - p) + 1
  
  if (Y <= 2){
    # sequência inicial: Y-1 caras e 1 coroa
    sequencia <- c(rep(1, Y - 1), 0)  # 1 = cara, 0 = coroa
    
    # continuar jogando até obter duas caras consecutivas
    anterior <- 0  # a última foi coroa
    
    repeat {
      atual <- rbinom(1, 1, p)  # Gera uma bernoulli(p)
      sequencia <- c(sequencia, atual) # adiciona a bernoulli ao final da sequência
      if (anterior == 1 && atual == 1) { # se tiver 2 caras consecutivas pode parar
        break
      }
      anterior <- atual # Caso contrário, apenas reinicia todo o processo
    }
    
    X <- length(sequencia)
  }
  else{
    X <- 2 # se Y é maior que 2 então necessariamente ocorreram 2 caras consecutivas
  }
  return(X)
}
Função X
X <- function(n, p){ # essa função vai gerar n unidades de X com prob p
  x <- numeric(n)
  for (i in 1:n){
    x[i] <- Xun(p)
  }
  return(x)
}
Aplicação das duas funções
Xun(0.5)
## [1] 4
X(20, 0.5)
##  [1]  6  9  4  5  4 19  4  2  3  9  4 10  2 15  5  9  7 12  4  4

Verificação da esperança e variância de \(X\)

Vamos verificar a média de \(X\), para \(p = 0.5\), com o aumento de \(n\).

p <- 0.5
set.seed(548254)

amostra50 <- X(50, p)
amostra100 <- X(100, p)
amostra1000 <- X(1000, p)
amostra10000 <- X(10000, p)
amostragigante <- X(1000000, p)

medias <- c(mean(amostra50),
            mean(amostra100),
            mean(amostra1000),
            mean(amostra10000),
            mean(amostragigante))
print(medias)
## [1] 6.82000 6.69000 5.93100 5.99490 6.00322

Lembrando que pelos cálculos, a média deve resultar em:\[\mathbb{E}(X) = \frac{1}{p^2} + \frac{1}{p}.\] Vamos cálcular isso no R para \(p = 0.5\).

p <- 0.5
muX <- (1/(p^2)) + (1/p); muX
## [1] 6

Agora vamos cálcular a variância das nossas amostras.

variancias <- c(var(amostra50),
                var(amostra100),
                var(amostra1000),
                var(amostra10000),
                var(amostragigante))
print(variancias)
## [1] 41.25265 21.04434 23.64588 21.80325 22.03972

Lembrando que a variância de \(X\) é calculada por: \[\mathbb{V}ar(X) = \frac{1}{p^4} + \frac{2}{p^3} - \frac{2}{p^2} - \frac{1}{p}.\]

Vamos calcular isso no R para \(p = 0.5\):

p <- 0.5
sigma2 <- (1/(p^4)) + (2/(p^3)) - (2/(p^2)) - (1/p)
sigma2
## [1] 22
LS0tDQp0aXRsZTogJ0VzcGVyYW7Dp2EgQ29uZGljaW9uYWwnDQphdXRob3I6ICcqSm9uYXMgRnJlaXJlKicNCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyolZCBkZSAlQiwgICVZKicpYCINCmxpbmstY2l0YXRpb25zOiB0cnVlDQpiaWJsaW9ncmFwaHk6IHJlZi5iaWINCmNzbDogImFzc29jaWFjYW8tYnJhc2lsZWlyYS1kZS1ub3JtYXMtdGVjbmljYXMuY3NsIg0KbGFuZzogInB0LWJyIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRoZW1lOg0KICAgICAgYm9vdHN3YXRjaDogZmxhdGx5DQogICAgc2NzczogX2Jvb3Rzd2F0Y2ggKDIpLnNjc3MNCiAgICBoaWdobGlnaHQ6IGJyZWV6ZWRhcmsNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICBhbmNob3Jfc2VjdGlvbnM6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgZmlnX2NhcHRpb246IHRydWUNCiAgICBjaXRhdGlvbl9wYWNrYWdlOiBiaWJsYXRleA0KLS0tDQo8YnI+DQoNCiMjIFF1ZXN0w6NvIHsudW5udW1iZXJlZH0NCg0KVW1hIG1vZWRhIGNvbSBwcm9iYWJpbGlkYWRlICRwJCBkZSBjYXJhIMOpIGxhbsOnYWRhIGF0w6kgcXVlIGR1YXMgY2FyYXMgY29uc2VjdXRpdmFzIG9jb3JyYW0uIFF1YWwgw6kgbyBuw7ptZXJvIGVzcGVyYWRvIGRlIGxhbsOnYW1lbnRvcyBwYXJhIHF1ZSBpc3RvIGFjb250ZcOnYT8NCg0KIyMgUmVzcG9zdGEgey50YWJzZXQgLnRhYnNldC1mYWRlIC51bm51bWJlcmVkfQ0KDQojIyMgVGVvcmlhIHsudW5udW1iZXJlZH0NCg0KU2VqYSAkWSQgbyBuw7ptZXJvIGRlIGxhbsOnYW1lbnRvcyBuZWNlc3PDoXJpb3MgcGFyYSBxdWUgdW1hIGNvcm9hIHVtYSBvY29ycmEuIFNhYmVtb3MgcXVlOiAkJFkgXHNpbSBHZW8ocSksJCQgZW0gcXVlICRxID0gMSAtIHAkLiBMb2dvLCBhIGZwIGRlICRZJCDDqSBkYWRhIHBvcjogJCRcbWF0aGJie1B9KFkgPSB5KSA9IHFwXnt5LTF9XHVuZGVyc2V0e1x7MSwgMiwgLi4uXH19e1xtYXRoYmJ7SX0oeSl9LiQkDQoNCk9ic2VydmUgcXVlIGVzdGFtb3MgaW50ZXJlc3NhZG9zIG5vIHZhbG9yIGVzcGVyYWRvIGRlICRYJCBxdWUgcG9kZSBzZXIgb2J0aWRvIGEgcGFydGlyIGRhIGVzcGVyYW7Dp2EgZGEgZXNwZXJhbsOnYSBjb25kaWNpb25hbCBkZSAkWCQgZGFkbyBxdWUgJFkkIG9jb3JyZXU6ICQkXG1hdGhiYntFfShYKSA9IFxtYXRoYmJ7RX1bXG1hdGhiYntFfShYfFkpXS4kJA0KDQpWYW1vcyBlbnRlbmRlciBhIGVzcGVyYW7Dp2EgY29uZGljaW9uYWwgJFxtYXRoYmJ7RX0oWHxZKSQuIFNlICRZJCDDqSBpZ3VhbCBhIDEsIGVudMOjbyBmb2kgbmVjZXNzw6FyaW8gdW0gw7puaWNvIGxhbsOnYW1lbnRvIHBhcmEgcXVlIG9jb3JyYSBjb3JvYS4gRGVzc2UgbW9kbywgYSBlc3BlcmFuw6dhIGNvbmRpY2lvbmFsIMOpOiAkJFxtYXRoYmJ7RX0oWHxZID0gMSkgPSBcbWF0aGJie0V9KDEgKyBYKSA9IDEgKyBcbWF0aGJie0V9KFgpLCQkIG91IHNlamEsIGFkaWNpb25hIDEgYW8gdmFsb3IgZXNwZXJhZG8gZGUgJFgkLCBqw6EgcXVlIG9jb3JyZXUgdW1hIGNvcm9hLCBlIHJlaW5pY2lhIHRvZG8gbyBwcm9jZXNzby4gU2UgJFkkIMOpIGlndWFsIGEgMiwgZW50w6NvIGZvcmFtIG5lY2Vzc8OhcmlvcyBkb2lzIGxhbsOnYW1lbnRvcyBwYXJhIHF1ZSBvY29ycmEgdW1hIGNvcm9hLiBMb2dvLCBhIGVzcGVyYW7Dp2EgY29uZGljaW9uYWwgw6k6ICQkXG1hdGhiYntFfShYfFkgPSAyKSA9IFxtYXRoYmJ7RX0oMiArIFgpID0gMiArIFxtYXRoYmJ7RX0oWCksJCQNCg0Kb3Ugc2VqYSwgYWRpY2lvbmEgMiBhbyB2YWxvciBlc3BlcmFkbyBkZSAkWCQsIHBvaXMgb2NvcnJldSB1bWEgY2FyYSBlIHVtYSBjb3JvYSwgbyBxdWUgZXF1aXZhbGUgYSBkb2lzIGxhbsOnYW1lbnRvcyBzZW0gb2NvcnJlciAyIGNhcmFzIGNvbnNlY3V0aXZhcy4gU2UgbyB2YWxvciBkZSAkWSQgw6kgbWFpb3Igb3UgaWd1YWwgYSAzLCBlbnTDo28gbmVjZXNzYXJpYW1lbnRlIG9jb3JyZXUgZHVhcyBvdSBtYWlzIGNhcmFzLCBqw6EgcXVlIGZvcmFtIGxhbsOnYWRvcyBtYWlzIHF1ZSBkb2lzIGxhbsOnYW1lbnRvcyBzZW0gb2NvcnJlciBjb3JvYS4gRGVzc2UgbW9kbywgYSBlc3BlcmFuw6dhIGNvbmRpY2lvbmFsIMOpOiAkJFxtYXRoYmJ7RX0oWHxZIFxnZXEgMykgPSAyLiQkDQoNCkFnb3JhLCBjb20gaXNzbywgcG9kZW1vcyBlbmNvbnRyYXIgbyB2YWxvciBlc3BlcmFkbyBkZSAkWCQ6DQokJFxiZWdpbnthbGlnbip9DQogIFxtYXRoYmJ7RX0oWCkgJj0gXG1hdGhiYntFfVtcbWF0aGJie0V9KFh8WSldXFwNCiAgJj0gXHN1bV97aT0xfV5caW5mdHlcbWF0aGJie0V9KFh8WSA9IGkpXG1hdGhiYntQfShZID0gaSlcXA0KICAmPSBcbWF0aGJie0V9KFh8WSA9IDEpXG1hdGhiYntQfShZID0gMSkgKyBcbWF0aGJie0V9KFh8WSA9IDIpXG1hdGhiYntQfShZID0gMikgKyBcc3VtX3tpPTN9XlxpbmZ0eVxtYXRoYmJ7RX0oWHxZID0gaSlcbWF0aGJie1B9KFkgPSBpKVxcDQogICY9ICgxICsgXG1hdGhiYntFfShYKSlxcF57MS0xfSArICgyICsgXG1hdGhiYntFfShYKSlxcF57Mi0xfSArIDJcc3VtX3tpPTN9XlxpbmZ0eSBxcF57aS0xfVxcDQogICY9IChxICsgcXApXG1hdGhiYntFfShYKSArIHEgKyAycXAgKyAyXGZyYWN7cXBeMn17MSAtIHB9XFwNCiAgXG1hdGhiYntFfShYKSAtICgxLXBeMilcbWF0aGJie0V9KFgpICY9IDEgLSBwICsgMnAgLSAycF4yICsgMlxmcmFje3FwXjJ9e3F9XFwNCiAgcF4yXG1hdGhiYntFfShYKSAmPSAxICsgcFxcDQogIFxtYXRoYmJ7RX0oWCkgJj0gXGZyYWN7MX17cF4yfSArIFxmcmFjezF9e3B9LiANClxlbmR7YWxpZ24qfSQkDQoNCkFnb3JhIHZhbW9zIG9idGVyIG8gc2VndW5kbyBtb21lbnRvIGRlICRYJC4NCiQkXGJlZ2lue2FsaWduKn0NCiAgXG1hdGhiYntFfShYXjIpICY9IFxtYXRoYmJ7RX1bXG1hdGhiYntFfShYXjJ8WSldXFwNCiAgJj0gXHN1bV97aT0xfV5caW5mdHlcbWF0aGJie0V9KFheMnxZID0gaSlcbWF0aGJie1B9KFkgPSBpKVxcDQogICY9IFxtYXRoYmJ7RX0oWF4yfFkgPSAxKVxtYXRoYmJ7UH0oWSA9IDEpICsgXG1hdGhiYntFfShYXjJ8WSA9IDIpXG1hdGhiYntQfShZID0gMikgKyBcc3VtX3tpPTN9XlxpbmZ0eVxtYXRoYmJ7RX0oWF4yfFkgPSBpKVxtYXRoYmJ7UH0oWSA9IGkpXFwNCiAgJj0gXG1hdGhiYntFfVsoMSArIFgpXjJdcSArIFxtYXRoYmJ7RX1bKDIgKyBYKV4yXXFwICsgMl4yXHN1bV97aT0zfV5caW5mdHkgcXBee2ktMX1cXA0KICAmPSBcbWF0aGJie0V9KDEgKyAyWCArIFheMilxICsgXG1hdGhiYntFfSg0ICsgNFggKyBYXjIpcXAgKyA0XGZyYWN7cXBeMn17MSAtIHB9XFwNCiAgJj0gWzEgKyAyXG1hdGhiYntFfShYKSArIFxtYXRoYmJ7RX0oWF4yKV1xICsgWzQgKyA0XG1hdGhiYntFfShYKSArIFxtYXRoYmJ7RX0oWF4yKV1xcCArIDRwXjJcXA0KICAmPSBxICsgNHFwICsgNHBeMiArICgycSArIDRxcClcbWF0aGJie0V9KFgpICsgKHEgKyBxcClcbWF0aGJie0V9KFheMilcXA0KICBcbWF0aGJie0V9KFheMikgLSAoMSAtIHBeMilcbWF0aGJie0V9KFheMikgJj0gMSAtIHAgKyA0cCAtIDRwXjIgKyA0cF4yICsgKDIgLSAycCArIDRwIC0gNHBeMilcYmlnZyhcZnJhY3sxfXtwXjJ9ICsgXGZyYWN7MX17cH1cYmlnZylcXA0KICBwXjJcbWF0aGJie0V9KFheMikgJj0gMSArIDNwICsgKDIgKyAycCAtIDRwXjIpXGZyYWN7MX17cF4yfSArICgyICsgMnAgLSA0cF4yKVxmcmFjezF9e3B9XFwNCiAgcF4yXG1hdGhiYntFfShYXjIpICY9IDEgKyAzcCArIFxmcmFjezJ9e3BeMn0gKyBcZnJhY3syfXtwfSAtIDQgKyBcZnJhY3syfXtwfSArIDIgLSA0cFxcDQogIHBeMlxtYXRoYmJ7RX0oWF4yKSAmPSBcZnJhY3syfXtwXjJ9ICsgXGZyYWN7NH17cH0gLSAxICAtIHAgXFwNCiAgXG1hdGhiYntFfShYXjIpICY9IFxmcmFjezJ9e3BeNH0gKyBcZnJhY3s0fXtwXjN9IC0gXGZyYWN7MX17cF4yfSAtIFxmcmFjezF9e3B9Lg0KXGVuZHthbGlnbip9JCQNCg0KQ29tIGVzc2VzIGRvaXMgcmVzdWx0YWRvcyBwb2RlbW9zIGNhbGN1bGFyIGEgdmFyacOibmNpYTogDQokJFxiZWdpbnthbGlnbip9DQogIFxtYXRoYmJ7Vn1hcihYKSAmPSBcbWF0aGJie0V9KFheMikgLSBbXG1hdGhiYntFfShYKV1eMlxcDQogICY9IFxmcmFjezJ9e3BeNH0gKyBcZnJhY3s0fXtwXjN9IC0gXGZyYWN7MX17cF4yfSAtIFxmcmFjezF9e3B9IC0gXGJpZ2coXGZyYWN7MX17cF4yfSArIFxmcmFjezF9e3B9XGJpZ2cpXjJcXA0KICAmPSBcZnJhY3syfXtwXjR9ICsgXGZyYWN7NH17cF4zfSAtIFxmcmFjezF9e3BeMn0gLSBcZnJhY3sxfXtwfSAtIFxmcmFjezF9e3BeNH0gLSAyXGZyYWN7MX17cF4zfSAtIFxmcmFjezF9e3BeMn1cXA0KICAmPSAgXGZyYWN7MX17cF40fSArIFxmcmFjezJ9e3BeM30gLSBcZnJhY3syfXtwXjJ9IC0gXGZyYWN7MX17cH0uDQpcZW5ke2FsaWduKn0kJA0KDQojIyMgQ29tcHV0YWNpb25hbCB7LnVubnVtYmVyZWR9DQoNCiMjIyMgRnVuw6fDtWVzIHBhcmEgZ2VyYXIgJFgkIHsudGFic2V0IC50YWJzZXQtZmFkZSAudW5udW1iZXJlZH0NCg0KQXMgc2VndWludGVzIGZ1bsOnw7VlcyBnZXJhbSBhIHZhcmnDoXZlbCBhbGVhdMOzcmlhICRYJC4NCg0KKiBBIGZ1bsOnw6NvIGBYdW5gIEdlcmEgYXBlbmFzIHVtIHZhbG9yIGRlICRYJC4NCiogQSBmdW7Dp8OjbyBgWGAgdXNhIGEgZnVuw6fDo28gYFh1bmAgcGFyYSBnZXJhciAkbiQgdmFsb3JlcyBkZSAkWCQuDQoNCiMjIyMjIEZ1bsOnw6NvIGBYdW5gIHsudW5udW1iZXJlZH0NCg0KYGBge3J9DQpYdW4gPC0gZnVuY3Rpb24ocCkgew0KICAjIFkgfiBHZW9tKDEgLSBwKTogbsO6bWVybyBkZSBmYWxoYXMgKGNhcmFzKSBhdMOpIGEgcHJpbWVpcmEgY29yb2ENCiAgWSA8LSByZ2VvbSgxLCAxIC0gcCkgKyAxDQogIA0KICBpZiAoWSA8PSAyKXsNCiAgICAjIHNlcXXDqm5jaWEgaW5pY2lhbDogWS0xIGNhcmFzIGUgMSBjb3JvYQ0KICAgIHNlcXVlbmNpYSA8LSBjKHJlcCgxLCBZIC0gMSksIDApICAjIDEgPSBjYXJhLCAwID0gY29yb2ENCiAgICANCiAgICAjIGNvbnRpbnVhciBqb2dhbmRvIGF0w6kgb2J0ZXIgZHVhcyBjYXJhcyBjb25zZWN1dGl2YXMNCiAgICBhbnRlcmlvciA8LSAwICAjIGEgw7psdGltYSBmb2kgY29yb2ENCiAgICANCiAgICByZXBlYXQgew0KICAgICAgYXR1YWwgPC0gcmJpbm9tKDEsIDEsIHApICAjIEdlcmEgdW1hIGJlcm5vdWxsaShwKQ0KICAgICAgc2VxdWVuY2lhIDwtIGMoc2VxdWVuY2lhLCBhdHVhbCkgIyBhZGljaW9uYSBhIGJlcm5vdWxsaSBhbyBmaW5hbCBkYSBzZXF1w6puY2lhDQogICAgICBpZiAoYW50ZXJpb3IgPT0gMSAmJiBhdHVhbCA9PSAxKSB7ICMgc2UgdGl2ZXIgMiBjYXJhcyBjb25zZWN1dGl2YXMgcG9kZSBwYXJhcg0KICAgICAgICBicmVhaw0KICAgICAgfQ0KICAgICAgYW50ZXJpb3IgPC0gYXR1YWwgIyBDYXNvIGNvbnRyw6FyaW8sIGFwZW5hcyByZWluaWNpYSB0b2RvIG8gcHJvY2Vzc28NCiAgICB9DQogICAgDQogICAgWCA8LSBsZW5ndGgoc2VxdWVuY2lhKQ0KICB9DQogIGVsc2V7DQogICAgWCA8LSAyICMgc2UgWSDDqSBtYWlvciBxdWUgMiBlbnTDo28gbmVjZXNzYXJpYW1lbnRlIG9jb3JyZXJhbSAyIGNhcmFzIGNvbnNlY3V0aXZhcw0KICB9DQogIHJldHVybihYKQ0KfQ0KYGBgDQoNCiMjIyMjIEZ1bsOnw6NvIGBYYCB7LnVubnVtYmVyZWR9DQpgYGB7cn0NClggPC0gZnVuY3Rpb24obiwgcCl7ICMgZXNzYSBmdW7Dp8OjbyB2YWkgZ2VyYXIgbiB1bmlkYWRlcyBkZSBYIGNvbSBwcm9iIHANCiAgeCA8LSBudW1lcmljKG4pDQogIGZvciAoaSBpbiAxOm4pew0KICAgIHhbaV0gPC0gWHVuKHApDQogIH0NCiAgcmV0dXJuKHgpDQp9DQpgYGANCg0KIyMjIyMgQXBsaWNhw6fDo28gZGFzIGR1YXMgZnVuw6fDtWVzIHsudW5udW1iZXJlZH0NCmBgYHtyfQ0KWHVuKDAuNSkNCmBgYA0KDQpgYGB7cn0NClgoMjAsIDAuNSkNCmBgYA0KDQoNCiMjIyMgVmVyaWZpY2HDp8OjbyBkYSBlc3BlcmFuw6dhIGUgdmFyacOibmNpYSBkZSAkWCQgey51bm51bWJlcmVkfQ0KVmFtb3MgdmVyaWZpY2FyIGEgbcOpZGlhIGRlICRYJCwgcGFyYSAkcCA9IDAuNSQsIGNvbSBvIGF1bWVudG8gZGUgJG4kLg0KYGBge3J9DQpwIDwtIDAuNQ0Kc2V0LnNlZWQoNTQ4MjU0KQ0KDQphbW9zdHJhNTAgPC0gWCg1MCwgcCkNCmFtb3N0cmExMDAgPC0gWCgxMDAsIHApDQphbW9zdHJhMTAwMCA8LSBYKDEwMDAsIHApDQphbW9zdHJhMTAwMDAgPC0gWCgxMDAwMCwgcCkNCmFtb3N0cmFnaWdhbnRlIDwtIFgoMTAwMDAwMCwgcCkNCg0KbWVkaWFzIDwtIGMobWVhbihhbW9zdHJhNTApLA0KICAgICAgICAgICAgbWVhbihhbW9zdHJhMTAwKSwNCiAgICAgICAgICAgIG1lYW4oYW1vc3RyYTEwMDApLA0KICAgICAgICAgICAgbWVhbihhbW9zdHJhMTAwMDApLA0KICAgICAgICAgICAgbWVhbihhbW9zdHJhZ2lnYW50ZSkpDQpwcmludChtZWRpYXMpDQpgYGANCg0KTGVtYnJhbmRvIHF1ZSBwZWxvcyBjw6FsY3Vsb3MsIGEgbcOpZGlhIGRldmUgcmVzdWx0YXIgZW06JCRcbWF0aGJie0V9KFgpID0gXGZyYWN7MX17cF4yfSArIFxmcmFjezF9e3B9LiQkIFZhbW9zIGPDoWxjdWxhciBpc3NvIG5vIFIgcGFyYSAkcCA9IDAuNSQuDQpgYGB7cn0NCnAgPC0gMC41DQptdVggPC0gKDEvKHBeMikpICsgKDEvcCk7IG11WA0KYGBgDQoNCkFnb3JhIHZhbW9zIGPDoWxjdWxhciBhIHZhcmnDom5jaWEgZGFzIG5vc3NhcyBhbW9zdHJhcy4NCmBgYHtyfQ0KdmFyaWFuY2lhcyA8LSBjKHZhcihhbW9zdHJhNTApLA0KICAgICAgICAgICAgICAgIHZhcihhbW9zdHJhMTAwKSwNCiAgICAgICAgICAgICAgICB2YXIoYW1vc3RyYTEwMDApLA0KICAgICAgICAgICAgICAgIHZhcihhbW9zdHJhMTAwMDApLA0KICAgICAgICAgICAgICAgIHZhcihhbW9zdHJhZ2lnYW50ZSkpDQpwcmludCh2YXJpYW5jaWFzKQ0KYGBgDQoNCkxlbWJyYW5kbyBxdWUgYSB2YXJpw6JuY2lhIGRlICRYJCDDqSBjYWxjdWxhZGEgcG9yOiAkJFxtYXRoYmJ7Vn1hcihYKSA9IFxmcmFjezF9e3BeNH0gKyBcZnJhY3syfXtwXjN9IC0gXGZyYWN7Mn17cF4yfSAtIFxmcmFjezF9e3B9LiQkDQoNClZhbW9zIGNhbGN1bGFyIGlzc28gbm8gUiBwYXJhICRwID0gMC41JDoNCmBgYHtyfQ0KcCA8LSAwLjUNCnNpZ21hMiA8LSAoMS8ocF40KSkgKyAoMi8ocF4zKSkgLSAoMi8ocF4yKSkgLSAoMS9wKQ0Kc2lnbWEyDQpgYGANCg0KDQoNCg==