maratona-cadernodeproblemas11

12
11ª Maratona de Programação 23 de março de 2013 Caderno de Problemas Regras: ACM International Collegiate Programming Contest Brasil – Desafio CTBC (Este caderno contém 11 problemas; as páginas estão numeradas de 1 a 12) Participantes: UFU Uberlândia, MG UNITRI Uberlândia, MG IFTM Uberaba, Uberlândia, MG UNIUBE Uberaba, Uberlândia, MG FPU Uberlândia, MG UEMG Frutal, MG UNIPAC Araguari, MG UNIPAM Patos de Minas, MG CESUC Catalão, GO FACTHUS Uberaba, MG FEIT-UEMG Ituiutaba, MG PITÁGORAS Uberlândia, MG _______________________________________________________________________________ UNITRI: 23 de março de 2013 Página 1 de 12

Upload: jean-lucas

Post on 14-Aug-2015

73 views

Category:

Documents


1 download

DESCRIPTION

Maratona

TRANSCRIPT

Page 1: Maratona-CadernodeProblemas11

11ª Maratona de Programação23 de março de 2013

Caderno de Problemas

Regras: ACM International Collegiate Programming Contest

Brasil – Desafio CTBC

(Este caderno contém 11 problemas; as páginas estão numeradas de 1 a 12)

Participantes:UFU Uberlândia, MGUNITRI Uberlândia, MGIFTM Uberaba, Uberlândia, MGUNIUBE Uberaba, Uberlândia, MGFPU Uberlândia, MGUEMG Frutal, MGUNIPAC Araguari, MGUNIPAM Patos de Minas, MGCESUC Catalão, GO FACTHUS Uberaba, MGFEIT-UEMG Ituiutaba, MGPITÁGORAS Uberlândia, MG

_______________________________________________________________________________UNITRI: 23 de março de 2013 Página 1 de 12

Page 2: Maratona-CadernodeProblemas11

Problema AMostre a Sequência

Arquivo fonte: sequencia.c, sequencia.cpp ou sequencia.java

O problema de encontrar o próximo termo de uma sequência de números é geralmente proposta em testes de QI. Sua tarefa é gerar os N termos de uma sequência a partir de uma codificação desta sequência.

Considere que S = (Si), i ∈ N, descreva uma sequência de números reais onde o i-ésimo elemento é o Si. Uma sequência constante é definida com o seguinte operador:

S = [n] onde Si = n ∀ i ∈ N, onde n ∈ Z.

Outros operadores em uma determinada seqüência de números S = (Si), i ∈ N, são definidos da seguinte maneira:

V = [m + S] onde Vi =

V = [m * S] onde Vi =

Onde m ∈ N.

Veja alguns exemplos: [2 + [1]] = 2, 3, 4, 5, 6 ...

[1 + [2 + [1]]] = 1, 3, 6, 10, 15, 21, 28, 36 ...

[2 * [1 + [2 + [1]]]] = 2, 6, 36, 360, 5400, 113400 ...

[2 * [5 + [- 2]]] = 10, 30, 30, -30, 90, -450, 3150 ...

Sua tarefa é gerar os N termos de uma sequência, uma vez apresentada sua codificação.

EntradaA entrada é formada de vários casos de testes. Cada caso é formado por uma única linha contendo a codificação (sem espaços) , seguido de um espaço separando a codificação de um número N (2 ≤ N ≤ 50). A última linha contém o número zero indicando o fim das entradas.

SaídaPara cada caso de teste, deverá ser gerada apenas uma linha contendo a sequência de N termos separados por espaço em branco. Lembrando que o último número da sequência também deverá ser seguido de um espaço em branco.

Exemplos de Entrada

[2+[1]] 3 [2*[5+[-2]]] 7 0

Exemplos de Saída

2 3 4 10 30 30 -30 90 -450 3150

_______________________________________________________________________________UNITRI: 23 de março de 2013 Página 2 de 12

Page 3: Maratona-CadernodeProblemas11

Problema BNoite no Museu

Arquivo fonte: noitenomuseu.c, noitenomuseu.cpp ou noitenomuseu.java

A cidade de Viena é chamada “cidade da cultura“ porque, entre outras coisas, abriga uma grande quantidade de museus, mais de 100. Como consequência, é muito difícil e caro visitar todos os museus, não importando o tempo que ficar na cidade. Entretanto, tem uma noite especial, chamada “Noite no Museu”, que se permite a visita a vários museus com apenas um ingresso, das 18:00h até a 01:00h da manhã do próximo dia. Porém, é impossível visitar todos os museus da cidade por duas razões principais. A primeira razão é que alguns museus em Viena não entram nessa promoção porque fecham às 17:00 h. A segunda razão é que não há tempo suficiente para visitar os museus no tempo de 7 horas. Sua tarefa é construir um programa que dado o número de museus participantes, o tempo necessário para visitar cada museu e o tempo que leva para ir de um museu ao outro, encontre o melhor “tour” para os visitantes, ou seja, visitar o maior número de museus nessa noite.

EntradaA entrada contém vários casos de testes. A primeira linha de um caso de teste contém um inteiro N, que indicará o número de museus participantes na promoção ( 1 <= N <= 8). Cada museu tem um identificador único variando de 1 a N. A segunda linha contém N inteiros indicando o tempo, em minutos, necessário para visitar cada museu, de 1 a N. Então, teremos mais n linhas descrevendo o tempo para ir de um museu para todos os outros. A i-ésima linha contém N inteiros Mk ( 1 <= k <= N) representando o tempo, em minutos, para ir de um museu i para um museu k. Assuma que o i-ésimo inteiro na i-ésima linha é igual a 0. O final da entrada é indicado por N=0.

SaídaPara cada caso de teste, seu programa deverá produzir uma linha contendo o número máximo de museus que podem ser visitados durante a noite.

Exemplo de Entrada

2500 5000 120200 02220 2200 3020 02150 1500 120200 00

Exemplo da Saída

012

_______________________________________________________________________________UNITRI: 23 de março de 2013 Página 3 de 12

Page 4: Maratona-CadernodeProblemas11

Problema CFuga

Arquivo fonte: fuga.c, fuga.cpp ou fuga.java

Você, um defensor das causas perdidas, foi preso. E na prisão, as coisas não vão nada bem. Entretanto, seu companheiro de sela, tem um plano mirabolante para você e ele fugirem da cadeia. Ele encontrou uma maneira de ajudar você a fugir do país. Você deverá ir para a estação de trem, onde deixará o país. Seu companheiro fugirá primeiro e correrá pelas ruas da cidade até a estação de trem. Então, ele irá ligar para você no seu celular (aparelho que você recebeu “por baixo dos panos” de um amigo dentro de um bolo), e você iniciará a corrida até a mesma estação de trem. Quando vocês se encontrarem, embarcarão no trem e ficarão livres.

Seu companheiro correrá pelas ruas durante o dia, usando as roupas de presidiário, logo, as pessoas irão notar. Este é o motivo porque você não poderá segui-lo durante a fuga – as autoridades poderão estar esperando você na estação de trem. Você deverá utilizar um caminho totalmente diferente (embora você possa utilizar os mesmos cruzamentos que seu companheiro). Qual é o tempo mínimo que você e seu companheiro levarão da cadeia até embarcarem no trem?Em suma, dado um grafo ponderado, não direcionado, encontre o menor caminho para ir de S até T e voltar sem visitar o mesmo vértice duas vezes.

EntradaA entrada conterá vários casos de testes. Cada caso de teste iniciará com um inteiro n (2 ≤ n ≤ 100) – o número de nós (cruzamentos). A cadeia é o nó de número 1, e a estação de trem é o nó de número n. A próxima linha conterá um inteiro m – o número de ruas. As próximas m linhas descreverão as m ruas. Cada linha conterá 3 inteiros – os dois nós conectados por uma rua e o tempo necessário para correr entre os nós (em segundos). Nenhuma rua levará mais do que 1000s ou menos que 1s. Cada rua se conectará a dois diferentes nós. Nenhum par de nós será diretamente conectado por mais do que uma rua. O último caso de teste será seguido por uma linha contendo o número 0.

SaídaPara cada caso de teste, a saída deverá ser uma linha contendo um único inteiro – o número de segundos que você e seu companheiro precisarão para ir da cadeia até o momento do embarque na estação de trem. (Assuma que você não precisará esperar pelo trem – ele sai a cada segundo) Se não houver solução, escreva “Volte para a Cadeia.”.

Exemplos de Entrada211 2 999331 3 102 1 203 2 509121 2 101 3 101 4 102 5 103 5 104 5 105 7 106 7 107 8 106 9 107 9 108 9 100Exemplos de SaídaVolte para a Cadeia.80Volte para a Cadeia.

_______________________________________________________________________________UNITRI: 23 de março de 2013 Página 4 de 12

Page 5: Maratona-CadernodeProblemas11

Problema DOrdenando o Trace

Arquivo fonte: trace.c, trace.cpp ou trace.java

Juvenil é programador da empresa Traceable. O software que ele está desenvolvendo captura eventos oriundos de vários servidores e apresenta na tela para o usuário, fazendo um “trace” do que está acontecendo nesses computadores.O evento vem acompanhado de duas informações – timestamp (hora que o evento aconteceu) – e uma descrição. Como abaixo:

10:15:25:346-Iniciou a configuração do equipamento X10:16:26:852-Finalizou a configuração do equipamento X10:17:01:452-Iniciou procedimento de backup da base Y

Como você pode observar o timestamp é organizado em: hora:minuto:segundo:millisegundos. Onde a hora está no formato de 24 horas. Um traço “-” é utilizado para separar o timestamp da descrição do evento.

Como os eventos oriundos de vários servidores são enviados a uma fila, eles podem chegar em momentos diferentes, porém devem ser organizados, em tempo real, a medida que forem sendo mostrados na tela. Tempo real nesse contexto significa que você não irá adicionar em uma lista e ordená-la, o objetivo é encontrar a posição exata para encaixar o evento.

Seu trabalho é ajudar Juvenil a fazer essa organização e dizer quantos eventos ele terá que “pular” para um novo evento entrar na posição correta.

EntradaA entrada é formada de vários casos de teste. A primeira linha de cada caso de teste, contem um número N (0 ≤ N ≤ 1000) representando o número de eventos a serem considerados. As próximas N linhas, são os eventos que já estão adicionados na tela do usuário. A próxima linha contém o evento que deverá ser encaixado na posição correta. Para indicar o fim dos casos de testes é utilizado o número -1.

SaídaPara cada caso de teste, deverá ser mostrado o número de eventos que este novo evento teve que “pular” para chegar à posição correta. Se os horários forem exatamente iguais, então o novo evento deve ser inserido na frente do evento anterior, ou seja, sem “pulo”.

Exemplo de entrada310:15:25:346-Iniciou a configuração do equipamento X10:16:26:852-Finalizou a configuração do equipamento X10:17:01:452-Iniciou procedimento de backup da base Y10:18:20:123-Finalizou procedimento de backup da base Y520:35:25:376-Iniciou programação da interface Z20:36:26:832-Finalizou programação da interface Z20:36:41:442-Iniciou job de agendamento de clientes20:37:20:823-Finalizou job de agendamento de clientes20:38:20:273-Iniciou cancelamento da base W20:37:10:227-Finalizou cancelamento da base W-1

Exemplo de saída02

_______________________________________________________________________________UNITRI: 23 de março de 2013 Página 5 de 12

Page 6: Maratona-CadernodeProblemas11

Problema EPreenchendo Cheque Errado

Arquivo fonte: cheque.c, cheque.cpp ou cheque.java

Betim é um homem cheio do dinheiro, e como um bom marido que é, presenteia sua esposa constantemente. De tanto dinheiro que tem, muitas vezes não percebe que preencheu um cheque errado e quando percebe na sua conta corrente, só consegue ver a diferença do valor da compra com o que preencheu no cheque.

Fazendo uma pesquisa em seus cheques, ele percebeu que inverte o algarismo das dezenas com o das centenas. Por isso o valor pago é frequentemente diferente do valor da compra.

Sua tarefa é dizer a Betim qual é o algarismo escrito no cheque na casa das dezenas.

EntradaA entrada é formada por vários casos de teste. Cada caso de teste é formado por uma única linha contendo a diferença D (90 ≤ D ≤ 720) onde sempre terminará com zero. Seguido de uma proporção dos algarismos, ou seja, se tivermos a proporção 1 e 2, significa que o algarismo das dezenas, no cheque, é duas vezes o algarismo das centenas – OBS: nunca teremos uma proporção igual e centenas e dezenas > 0. Para indicar o fim dos casos de testes é utilizado -1.

SaídaPara cada caso de teste uma linha deve ser escrita com o algarismo escrito no cheque na casa das dezenas.

Exemplo de entrada270 1 2360 1 3-1

Exemplo de saída32

_______________________________________________________________________________UNITRI: 23 de março de 2013 Página 6 de 12

Page 7: Maratona-CadernodeProblemas11

Problema FTemperatura LunarArquivo fonte: lua.c, lua.cpp ou lua.java

Sem as proteções da atmosfera e do cinturão magnético que existem na Terra, a Lua fica exposta ao ataque do Sol, que é um astro em constante explosão atômica. As explosões do Sol emitem ondas letais de partículas. Uma pessoa que ficasse desprotegida na superfície da Lua, num lugar onde o Sol incidisse diretamente, sofreria um bombardeio radioativo tão intenso quanto se estivesse nas imediações da usina russa de Chernobyl no momento do acidente que matou 31 pessoas, em 1986. Além da radiação solar, outro efeito desta falta de proteção contra o Sol que existe na Lua é a enorme variação de temperatura. Nas regiões próximas do equador lunar, a variação de temperatura é brutal, passando de cerca de 130 graus positivos durante o dia a 129 graus negativos à noite. Para estudar com mais precisão as variações de temperatura na superfície da Lua, a NASA enviou à Lua uma sonda com um sensor que mede a temperatura de 1 em 1 minuto. Um dado importante que os pesquisadores desejam descobrir é como se comporta a média da temperatura, considerada em intervalos de uma dada duração (uma hora, meia hora, oito horas, etc.). Por exemplo, para a sequência de medições 8, 20, 30, 50, 40, 20, -10, e intervalos de quatro minutos, as médias são respectivamente 108/4=27, 140/4=35, 140/4=35 e 100/4=25.

Você foi recentemente contratado pela NASA, e sua primeira tarefa é escrever um programa que, conhecidos a sequência de temperaturas medidas pelo sensor, e o tamanho do intervalo desejado, informe qual a maior e qual a menor temperatura média observadas, considerando o tamanho do intervalo dado.

EntradaA entrada é composta de vários conjuntos de teste. A primeira linha de um conjunto de teste contém dois números inteiros positivos N e M, que indicam respectivamente o número total de medições de temperatura de uma sequência obtida pelo sensor, e o tamanho dos intervalos, em minutos, em que as médias devem ser calculadas. As N linhas seguintes contêm um número inteiro cada, representando a sequência de medidas do sensor. O final da entrada é indicado quando N = M = 0. Onde:0 ≤ N ≤ 10000 (N = 0 apenas para indicar o fim da entrada)-200 ≤ Temperatura ≤ 2001 ≤ M ≤ N

SaídaPara cada conjunto de teste da entrada seu programa deve produzir três linhas. A primeira linha identifica o conjunto de teste, no formato “Teste n”, onde n é numerado a partir de 1. A segunda linha deve conter dois números inteiros X e Y, separados por um espaço em branco, representando respectivamente os valores da menor e da maior média de temperatura, conforme determinado pelo seu programa. O valor da média deve ser truncado, se a média não for um número inteiro (ou seja, deve ser impressa apenas a parte inteira). A terceira linha deve ser deixada em branco.

Exemplo de Entrada4 2-5-12617 4-355100100505030 0Exemplo de SaídaTeste 1-8 3

Teste 242 75

_______________________________________________________________________________UNITRI: 23 de março de 2013 Página 7 de 12

Page 8: Maratona-CadernodeProblemas11

Problema GCartão de Crédito

Arquivo fonte: cartao.c, cartao.cpp ou cartao.java

Hoje em dia é muito comum fazermos compras com cartão de crédito na internet. Entretanto, devido a sequência de números do cartão ser relativamente longa, é fácil cometermos erros enquanto digitamos. Para rapidamente identificar erros de digitação, a maioria das lojas virtuais (e-commerce) usa um algoritmo para verificar esses números.

Um algoritmo popular é o Luhn, que pode detectar de um a vários números digitados errados. O algoritmo funciona da seguinte maneira (para cartão de crédito):

1. Dobre o primeiro, terceiro, quinto e assim sucessivamente dígitos e obtenha uma lista de números.

2. Some os dígitos dos números dessa lista, então some os dígitos que não foram dobrados do número original. Some os dois resultados.

3. Se o total termina com 0 (zero), o número do cartão de crédito é válido, caso contrário é inválido.

For exemplo, usando o número 5181 2710 9900 0012:

1. Duplicando os dígitos de acordo com o algoritmo, obtemos os valores: 10,16,4,2,18,0,0,2

2. Some os dígitos desta lista: (1+0) + (1+6) + 4 + 2 + (1+8) + 0 + 0 + 2 = 25. A soma

dos dígitos não dobrados é: 1 + 1 + 7 + 0 + 9 + 0 + 0 + 2 = 20, então o total é 20 + 25 = 45.

3. 45 não termina com 0, portanto o número do cartão de crédito é inválido.

Para este problema você precisa escrever um programa que verifica se o número do cartão de crédito é válido ou não de acordo com o algoritmo de Luhn.

EntradaA entrada começa com um número N em uma única linha, seguida de N linhas, cada uma contendo um número de cartão de crédito. Cada cartão de crédito consiste de 16 dígitos decimais em grupos de quatro separados por um espaço em branco.

SaídaA saída consiste de uma linha para cada número de cartão de crédito. Se o número do cartão é válido, esta linha deve ter uma string “Valido”, caso contrário a string “Invalido”. Atenção – sem acentos e sem aspas.

Exemplo de entrada25181 2710 9900 00125181 2710 9900 0017

Exemplo de SaídaInvalidoValido

_______________________________________________________________________________UNITRI: 23 de março de 2013 Página 8 de 12

Page 9: Maratona-CadernodeProblemas11

Problema HJogo é Dinheiro!

Arquivo fonte: jogo.c, jogo.cpp ou jogo.java

Rodrigo está brincando de um jogo de cartas no qual cada carta possui um número inteiro escrito nela.

O jogo funciona da seguinte maneira: primeiro o jogador recebe algumas cartas - sua "mão de cartas". Depois, o jogador deve organizar as cartas em sua mão em fileiras.

Uma fileira é um conjunto de cartas com valores consecutivos. Por exemplo: as três cartas {3, 4, 5} ou a única carta {7} representam fileiras.

O jogador receberá, então, uma quantidade em dinheiro igual ao tamanho da menor fileira em sua mão.

Se ele não tem cartas, então não tem fileiras. Nesse caso o jogador não recebe nenhum dinheiro (0).

Será que Rodrigo conseguirá ganhar uns trocados nesse jogo, contando com sua ajuda?

Você receberá uma série de casos de teste (jogadas), cada um descrevendo as cartas de uma "mão". Encontre o valor máximo em dinheiro que o jogador Rodrigo receberá em cada caso.

EntradaA primeira linha da entrada contém o número de casos de teste, T (1 ≤ T ≤ 100). Cada caso consiste de uma linha. Cada linha contém N (0 ≤ N ≤ 1000), o número de cartas na mão do jogador, seguido por N inteiros representando os números escritos nas cartas. Estes números estão no intervalo fechado de 1 e 10000. Todos os números são separados por espaço.SaídaPara cada caso de teste, imprima uma linha contendo D, onde D é a quantidade máxima em dinheiro que o Rodrigo poderá receber naquela jogada.

Exemplo de entrada

410 1 2 3 4 5 10 9 8 7 68 101 102 103 104 105 106 103 10405 1 2 3 4 9

Exemplo de saída

10401

_______________________________________________________________________________UNITRI: 23 de março de 2013 Página 9 de 12

Page 10: Maratona-CadernodeProblemas11

Problema IMarat

Arquivo fonte: marat.c, marat.cpp ou marat.java

Português, inglês, espanhol, alemão... nada disso! Você conhece o idioma Marat? Para traduzir um texto em Marat, basta substituir uma letra por outra. Este mapeamento é um-para-um, ou seja, uma letra de entrada sempre será substituída pela mesma letra de saída e diferentes letras de entrada sempre serão substituídas por diferentes letras de saída. Uma letra pode ser substituída por ela mesma. Espaços serão sempre espaços!

Por exemplo (e fica a dica!), nosso brilhante algoritmo inclui os seguintes mapeamentos: 'g' -> 'b', 'h' -> 'q', 'r' -> 'v', 'x' -> 'z'. Assim, a string em Marat "ghr x" será "bqv z".

E lembre-se: Marat é baseado no melhor mapeamento possível e nunca mudará. Será sempre o mesmo em todo caso de teste.

Dado um texto em Marat, você é capaz de traduzi-lo utilizando nosso algoritmo de mapeamento?

EntradaA primeira linha da entrada indica o número de casos de teste, T (1 ≤ T ≤ 30). T casos de teste seguem, um por linha. Cada linha representa uma string M em Marat, composta por uma ou mais palavras, contendo letras dentro do intervalo fechado 'a'-'z'. Haverá exatamente um caracter de espaço (' ') entre palavras consecutivas e M contém no máximo 100 caracteres.

SaídaPara cada caso de teste, imprima uma linha contendo S, onde S é a tradução da string M.

Exemplo de entrada

3km ynl ndcslz endqliev pdopodz eyvsl eluv sdkvtmt fj f bdybn vmw

Exemplo de saída

do the harlem shakepsy gangnam style sexy ladywow if i catch you

_______________________________________________________________________________UNITRI: 23 de março de 2013 Página 10 de 12

Page 11: Maratona-CadernodeProblemas11

Problema JPáscoa

Arquivo fonte: pascoa.c, pascoa.cpp ou pascoa.java

Jaque não vê a hora de chegar a Páscoa! Ela recebeu um crédito C numa chocolateria e gostaria de comprar dois ovos de páscoa. Primeiramente, ela conhece a loja e cria uma lista L com todos os ovos disponíveis. Desta lista, ela gostaria de comprar dois itens que somados, atingem o valor total do crédito recebido. Você consegue ajudar Jaque a otimizar sua compra de ovos deste ano?

Sua solução deve apontar dois inteiros, representando as posições dos itens na lista de Jaque (em ordem crescente) cuja soma de seus preços, é exatamente o valor do crédito C.

EntradaA primeira linha contém o número N ≤ 50, representando a quantidade de casos de teste. Cada caso de teste seguinte terá:

uma linha com o valor C (5 ≤ C ≤ 1000), o crédito recebido na chocolateria;uma linha contendo o valor I (3 ≤ I ≤ 2000), a quantidade de itens na loja euma linha contendo uma lista de I inteiros, separados por espaço. Cada inteiro P (1 ≤ P ≤ 1000) indica o preço de um ovo de páscoa na loja.

Cada caso de teste terá exatamente uma solução.

SaídaPara cada caso de teste, imprima uma linha contendo "Caso #x: " seguido dos índices dos dois itens cujos preços, somados, representam exatamente o crédito de Jaque. O menor índice deve ser impresso primeiro e "x" representa o caso de teste em questão (começando em 1).

Exemplo de entrada

310035 75 252007150 24 79 50 88 345 3882 1 9 4 4 56 90 3

Exemplo de saída

Caso #1: 2 3Caso #2: 1 4Caso #3: 4 5

_______________________________________________________________________________UNITRI: 23 de março de 2013 Página 11 de 12

Page 12: Maratona-CadernodeProblemas11

Problema KIntervalos

Arquivo fonte: intervalos.c, intervalos.cpp ou intervalos.java

Um inteiro positivo é um palíndrome se sua representação decimal (sem zeros à esquerda) é uma string palíndrome (uma string cuja leitura é a mesma da direita para esquerda e vice-versa). Por exemplo, os números 5, 77, 363, 4884, 11111, 12121 e 349943 são palíndromes.

Um intervalo de inteiros é interessante se ele contém um número ímpar de palíndromes. O intervalo [L,R], com L ≤ R, é definido como a sequência de inteiros de L para R (inclusive): (L, L+1, L+2, …, R-1, R). L é o primeiro e R o último número do intervalo.

O intervalo [L1,R1] é um subintervalo de [L,R] se L ≤ L1 ≤ R1 ≤ R. Sua missão é determinar quantos subintervalos interessantes de [L,R] existem.

EntradaA primeira linha da entrada indica o número de casos de teste, T (1 ≤ T ≤ 120). Cada caso seguinte é uma única linha contendo dois inteiros positivos, L e R (nesta ordem), separados por um espaço, onde 1 ≤ L ≤ R ≤ 1013.

SaídaPara cada caso de teste, imprima uma linha contendo “y”: o número de subintervalos interessantes de [L,R], módulo 1000000007.

Exemplo de entrada31 21 712 110

Exemplo de saída1122466

_______________________________________________________________________________UNITRI: 23 de março de 2013 Página 12 de 12