View Full Version : Pascal - Andamento dum Robot


SwimmerBoy
26-10-2004, 12:53
Olá ppl

Então a situação é a seguinte:

Tenho uma cadeira de IP (introdução à programção) e nunca tive programação na vida..... Estou a apanhar completamente do ar....

Precisava de uma ajuda para fazer este programa:

Mover um Robot

Um determinado robot pode deslocar-se pelas diversas casas de um tabuleiro, por linhas ou por colunas, de forma análoga aos movimentos duma torre num tabuleiro de xadrez. As movimentações físicas permitidas são activadas por apenas dois comandos próprios:


1) A instrução Frente faz avançar o robot para a casa situada imediatamente à sua frente;

2) A instrução Direita resulta numa mudança de orientação do robot, por rotação vertical de 90 graus para a sua direita, sem se deslocar da casa em que se encontre nessa altura.


Por hipótese, as linhas e as colunas do tabuleiro têm a orientação dos pontos cardeais e são numeradas a partir do valor 1. Nestas condições, as linhas numeram-se no sentido Sul-Norte e as colunas no sentido Oeste-Este. Também se admite que, ao ser inicialmente colocado numa das casas do tabuleiro, a orientação do robot é sempre Sul, e considere que o tabuleiro tem 7 colunas e 9 linhas.

Pretende-se construir um programa para gerar e afixar no ecrã toda a sequência de comandos que levará o robot de uma posição inicial arbitrária a qualquer outra existente no tabuleiro, através da passagem pelo menor número possível de casas intermédias. As coordenadas das casas inicial e final serão dadas interactivamente pelo utilizador, pelo que precisarão de ser validadas. Além disso, o programa também deverá indicar a orientação do robot quando este atingir a casa final.

Não faço ideia de como começar.... O P4rthen0n pode confirmar...o nosso professor de práticas é um quanto ou tanto BAD e não ajuda os k mais precisam (aka eu e P4rthen0n)....

Dêm ai umas dicas sff

[[]]

Feiticeiro
26-10-2004, 14:49
Em Pascal? Em Pascal só aprendi a fazer uma calculadora...lol...

ctr
26-10-2004, 15:10
Depreendo que saibas o q é uma matriz, podes usar uma matriz bidimensional para fazer isso, por exemplo, podes preencher a matrix com 0 "zeros" em todas as casas excepto na casa em que está o robot, ai usas o valor 1 "um".
Cada vez que o robot se move para uma nova casa mudas o valor na matriz, onde ele estava passa a 0 e para onde vai muda para 1. Para onde ele está virado podes guardar isso numa outra variável. Outra maneira seria usares um apontador para a matrix, mais apontadores já é mais "à frente". Agora deves pesquisar o como fazer isto na linguagem que queres, aconselho que sejas tu a fazer o programa e não o "saques" já feito, senão nunca mais aprendes a sintax da linguagem e como funcionar com ela, logo que estejas mais dentro da linguagem o mais dificil torna-se ter a ideia de como desenhar o programa, optimiza-lo e não a programação em si.

Cmps.

HecKel
26-10-2004, 17:11
Segue a ideia que o ctr deu, no entanto não te esqueças que para programares tens de pensar da forma mais primária, isto é, tens de desmantelar o problema em vários subproblemas, e aí resolver individualmente cada subproblema, no fim só tens de garantir k funcionam todos juntos :) dá a ideia k te vai complicar a vida, mas na verdade em vez de um grande problema vais ter vários pequenos problemas que resolves rápidamente.

Mais outra coisa, quando estás a programar e pensas k o k vais fazer é imediato, lembra-te que programar essas ideias pode não ser tão linear assim, o pc é burro, tens de dizer todos os passinhos :P Agora vais achar isso ridiculo, mais tarde já deves compreender melhor :)

inginheiiro
26-10-2004, 17:12
Depreendo que saibas o q é uma matriz, podes usar uma matriz bidimensional para fazer isso, por exemplo, podes preencher a matrix com 0 "zeros" em todas as casas excepto na casa em que está o robot, ai usas o valor 1 "um".
Cada vez que o robot se move para uma nova casa mudas o valor na matriz, onde ele estava passa a 0 e para onde vai muda para 1. Para onde ele está virado podes guardar isso numa outra variável. Outra maneira seria usares um apontador para a matrix, mais apontadores já é mais "à frente". Agora deves pesquisar o como fazer isto na linguagem que queres, aconselho que sejas tu a fazer o programa e não o "saques" já feito, senão nunca mais aprendes a sintax da linguagem e como funcionar com ela, logo que estejas mais dentro da linguagem o mais dificil torna-se ter a ideia de como desenhar o programa, optimiza-lo e não a programação em si.

Cmps.

Faço das letras do ctr as minhas.
Se não meteres as mãos na massa, nunca mais lá vais.
dou-te uma paquena ajuda:


type
StatusType = (0, 1);
DirType=(Norte,Sul,Este,Oeste);
BoardType = array[1..9,1..7] of StatusType;
RobotType = Record
X : Integer;
Y : Integer;
Direccao : DirType;
end;

var
tabuleiro : BoardType;
Robot : RobotType;

Begin
(* Inicializa o tabuleiro *)

for count1 := 1 to 9 do
for count2 := 1 to 7 do
tabuleiro[count1, count2] := 0;

(* Coloca o robot na posicao 2,2 do tabuleiro *)
Robot.X:=2;
Robot.Y:=2;
Robot.Direccao:=Norte;
tabuleiro[Robot.X, Robot.Y]:=1;

...

End.

A resolução do problema é mais simples do que parece...

P4rthen0n
26-10-2004, 21:27
inginheiiro, isso eh o programa feitinho? :D

Obrigado pelas indicacoes dos 4, mas o maximo k nos aprendemos e k podemos usar eh while, if, array (k ele introduziu e eu nem percebi kek fazia nem como se fazia o proprio comando) e pouco mais. Como podem constactar, eh mesmo MUITO basico para kem ja sabe, mas nao para pessoas como eu k o pouco contacto com programacao k tive foi com o Pascal e da maneira k o Swimmer descreveu. :(

thz pela ajuda ate agora, mas nao vai dar :(

SwimmerBoy
26-10-2004, 21:42
Em meu nome e em nome do P4rthen0n, o nosso origado pelas dicas e pela ajuda, mas como ele descreveu, ainda não chegamos a types nem records....

inginheiiro... axas k és capaz de fazer o programa e colocares alguns comentarios nas diversas partes do programa a especificar o k é k cada comando faz (só +/-....)?!?

É k o meu (e do P4rthen0n) é não perceber o k cada comando vai fazer.... Não nos sabem explicar aquilo como deve ser nas aulas....

Desculpem a maçada e se por acaso parece k kero a papinha toda feita, mas sem saber o k cada comando faz e não tendo a ajuda do professor, é mm muito dificil.....

Origado a todos (+ uma vez) pela ajuda e pela compreensão...

[[]]

AwakE
26-10-2004, 21:42
Isso é Pascal?

Esse problema tem duas fases completamente separadas:

1 - Pensar no algoritmo que te resolve o problema (não precisas de teclar).

2 - Implementar.

Claro que na primeira fase convem ter o minimo ideia do que podes e não podes fazer. Antes de desesperares com a segunda, pensa na primeira ;).

PS: Não comeces a segunda sem ter a primeira feita....durante a segunda fase podes adaptar a solução, mas nunca faze-la de raiz.

Black_Gamer
26-10-2004, 21:44
inginheiiro, isso eh o programa feitinho? :D

Voces querem e a papa feita :D

LionGreen
26-10-2004, 22:08
Se Pascal for tão dificil como C++ um gaijo tem mesmo que agarrar o comboio desde inicio porque senão torna-se mesmo muito complicado :005: :005: :005:

fap
26-10-2004, 23:52
Se Pascal for tão dificil como C++ um gaijo tem mesmo que agarrar o comboio desde inicio porque senão torna-se mesmo muito complicado :005: :005: :005:

desculpem a expressão mas pascal é cagada :x2:

mas como qualquer coisa, convém ir aprendendo aos poucos e desde o início :)

SwimmerBoy
27-10-2004, 00:13
Pessoal, por favor, não façam disto spam....isto é para um trabalho e para mim, pascal é dificil, especialmente da maneira como esta a ser ensinado.....

Se kiserem ajudar, é bem vinda a ajuda, mas para falarem de outras coisas, façam-no no geral sff

[[]]

Kermit the frog
27-10-2004, 01:14
Pessoal, por favor, não façam disto spam....isto é para um trabalho e para mim, pascal é dificil, especialmente da maneira como esta a ser ensinado.....

Se kiserem ajudar, é bem vinda a ajuda, mas para falarem de outras coisas, façam-no no geral sff

[[]]


pah n desesperes...pascal é só treinar :x2: (spamming)...

Hj tenho teste ... damn ... vamos lá ver como corre :D




P.S. - Peçam à mónica para vos ensinar a fazer uma parte do programa... o p4rthen0n que peça :fart: , mas o xuimer com a sua tecnica do tlm tb dá...

inginheiiro
27-10-2004, 10:46
Boas,
Apesar de vc's não terem aprendido o que são records, nem types, nem Cases, deveriam estudar para acelarar a vossa aprendizagem. Só vos ajuda...

O meu pascal está um bocado rusty, já que não o uso á cerca de 15 anos :)

vamos lá então.

1. Tipos.
<b>Type</b> serve para declarar tipos de dados.
Supôe que queres declarar uma variavel que possa conter 3 tipos de fruta (Maca,Banana,uva), declaras um tipo que suporte isso.

Type Fruta=(Maca,Banana,Uva);
var
VariavelFruta:Fruta;
begin
VariavelFruta:=Maca;
VariavelFruta:=Banana;
VariavelFruta:=Uva;
end.


2.Records.
<b>Record</b> Serve para agregares informação (neste momento basta-te teres esta ideia, pois serve para algo mais :) ).

Supoe que queres criar um robot a 2D. Este tem que ter os seguintes dados:
PosiçãoX (Inteiro)
PosicaoY (Inteiro)
Orientacao (Norte,Sul,Este,Oeste).

1.declaras um tipo com as orientacoes.
type oriType=(Norte,Sul,Este,Oeste);

2.declaras um record que agrupe/junte os dados.
type robotType=record
X:Integer;
Y:Integer;
Orientacao: oriType;
end;

3. Assim já podes declarar uma variavel que represente o robot:
var robot:RobotType;
begin

{Uso do robot}
robot.x:=22;
robot.y:=12;
robot.Orientacao:=Norte;

end.


-------------------------------------/----------------------------------
Não vos vou resolver o problema, isso compete-vos a vós fazer ... o que é impossivel se só olharem para ele 30m ou nem tiverem interesse em puxar pelos neuronios...

No entanto dou-vos mais uma ajuda, o programa basicamente estruturado :

-------------------------------------/----------------------------------
type
DirType=(Norte,Sul,Este,Oeste);
BoardType = array[1..9,1..7] of integer;
RobotType = Record
X : Integer;
Y : Integer;
Direccao : DirType;
end;

var
tabuleiro : BoardType;
Robot : RobotType;
count1 : Integer;
Count2 : Integer;

Begin


{ INICIALIZA O ARRAY }

for count1 := 1 to 9 do
for count2 := 1 to 7 do
tabuleiro[count1, count2] := 0;


{ COLOCA O ROBOT NA POSICAO 2,2 VIRADO PARA SUL }

Robot.X:=2;
Robot.Y:=2;
Robot.Direccao:=Sul;
tabuleiro[Robot.X, Robot.Y]:=1;

{ VIRA O ROBOT PARA NORTE. }
Robot.Direccao:=Norte;

{ DESLOCA O ROBOT UMA POSIÇÃO PARA CIMA. }
tabuleiro[Robot.X, Robot.Y]:=0;
Robot.Y:=Robot.Y-1;
tabuleiro[Robot.X, Robot.Y]:=1;

{ IMPRIME O TABULEIRO NO ECRAN. }
for count1 := 1 to 9 do
Begin
for count2 := 1 to 7 do
Write(tabuleiro[count1, count2]+' ');
Writeln;
end;

Case Robot.Direccao of
Norte : Writeln('O Robot está virado para Norte!');
Sul : Writeln('O Robot está virado para Sul!');
Este : Writeln('O Robot está virado para Este!');
Oeste : Writeln('O Robot está virado para Oeste.');
end;


End.

-------------------------------------/----------------------------------

Mais não faço ... compete-vos a vc's PENSAR/analisar/estruturar/completar/testar o programa.

Faço isto pq sou um bocado contra a politica de ensino que muita gente usa nos dias que correm ... e sendo eu actualmente tmb professor numa instituição superior, tento mudar um bocado essa imagem, muitas vezes criada sem fundamento pelos alunos...

Seavoices
27-10-2004, 11:25
Bom, velhos tempos esses de Pascal. Foi um bom início para início de programação. Depois na programação de alto nível é tudo mais fácil

Aquilo que vos recomendo é terem atenção ao que desenvolver porque pode ajudar-vos imenso.

Tive dois óptimos professores, tanto em programação (Pascal neste caso) como também em Inteligência Artificial. Ambos neste momento no IST

Como tal, embora não vos vá ajudar directamente porque (como alguém disse) a papinha está toda aqui na thread, vou-vos recomendar o livro escrito pelo Dr. João Pavão Martins de introdução a Pascal:

Martins J. P., Introdução à Programação Utilizando o Pascal, Lisboa, Portugal: McGraw-Hill de Portugal, 1994

Já que aparentemente os vossos professores não são grande coisa, este livro pode ajudar imenso.

Um abraço

AwakE
27-10-2004, 22:07
Swimmer, já pensaste no algoritmo? Para essa parte não precisas do Pascal....só mm da massa cinzenta.

Já agora quanto tempo têm para fazer isso?

Chip
27-10-2004, 22:43
inginheiiro, ja te puseram a dar aulinhas? :D

É bem é bem, tinhas de começar a trabalhar um bocadinho de vez em quando :P

SwimmerBoy
27-10-2004, 23:09
Swimmer, já pensaste no algoritmo? Para essa parte não precisas do Pascal....só mm da massa cinzenta.

Já agora quanto tempo têm para fazer isso?

Algoritmo?!?! Traduz lá isso?!

Temos até sábado!

Kermit the frog
27-10-2004, 23:14
Algoritmo?!?! Traduz lá isso?!

Temos até sábado!

The term algorithm (pronounced AL-go-rith-um) is a procedure or formula for solving a problem. The word derives from the name of the mathematician, Mohammed ibn-Musa al-Khwarizmi, who was part of the royal court in Baghdad and who lived from about 780 to 850. Al-Khwarizmi's work is the likely source for the word algebra as well.

A computer program can be viewed as an elaborate algorithm. In mathematics and computer science, an algorithm usually means a small procedure that solves a recurrent problem.


An algorithm is a finite set of well-defined instructions for accomplishing some task which, given an initial state, will result in a corresponding recognisable end-state (contrast with heuristic). Algorithms can be implemented by computer programs, although often in restricted forms; an error in the design of an algorithm for solving a problem can lead to failures in the implementing program.


Example:

Given: a list "List"

largest = List[1]
counter = 2
while counter <= length(List):
if List[counter] > largest:
largest = List[counter]
counter = counter + 1
print largest

AwakE
27-10-2004, 23:29
Um algoritmo é um procedimento para resolução de um problema.

Antes de te pores a programar, tens de ter uma ideia de como vais resolver o problema.

Já pensaste como vais determinar o caminho mais curto a partir de todos os possiveis? Em termos conceptuais. A programação é apenas a implementação em Pascal (ou C ou Java, ou COBOL) do algoritmo.

Se não sabes como vais resolver o problema vais programar o q? Pelo que me apercebi nesta thread o teu problema não tem a ver com Pascal....tu não sabes é como resolver o problema. Se estiver enganado corrige-me.

Como alguem já disse, é preciso PENSAR.

SwimmerBoy
27-10-2004, 23:33
Eu já tenho o problema pensado...

A primeira parte do programa tá feito... o robot já anda na mesma linha.... Agora falta explicar-lhe como andar na coluna..... (e não tou a ver muito bem como vou fazer)!!

granado69
28-10-2004, 00:41
Swimerboy:
Tb tenho q fazer esse prog.
Já tá a funcionar mas às vezes crasha....
N percebo cú de funções em Pascal por isso tá à lá esparguete... mas mmo assim são só 91 linha
S te kiseres encontrar cmg amanhã na nova diz qq coisa 919423144
(n mostro aki o codigo pk tenho vergonha, iria dar motivos para riso a muita gente)

inginheiiro:
Thx pela ajuda mas axo q n nos deixam usar essas cenas nesta altura =/

Akilo dá pra fazer tudo à lá esparguete... if's e while's
É só puxar um bocado pela cabeça (eu demorei bué horas...)

Já agora um debugger pra Pascal, q é q recomendam??

AwakE
28-10-2004, 15:14
Eu já tenho o problema pensado...

A primeira parte do programa tá feito... o robot já anda na mesma linha.... Agora falta explicar-lhe como andar na coluna..... (e não tou a ver muito bem como vou fazer)!!

Como é que fizeste para determinar o caminho mais curto? Só por curiosidade.

SwimmerBoy
28-10-2004, 21:59
Na mesma linha...só existe um caminho mais curto!!! :P

AwakE
28-10-2004, 23:05
Na mesma linha...só existe um caminho mais curto!!! :P

Ahhhhh, o gajo não se mexe na diagonal....ah....epah isso é....

SwimmerBoy
28-10-2004, 23:19
JA TERMINEI O PROGRAMA!!!!!

Kermit the frog
29-10-2004, 01:48
JA TERMINEI O PROGRAMA!!!!


AH ca ganda maluco ó meu... vá foste a tempo...agora só falta o stor darte má nota pq nas aulas ficas a ver o forum, em vez de prestares atenção ao quele diz... :001:

HecKel
29-10-2004, 01:55
Tu tens uma moral para o que acabaste de postar :P até parece k não fazes o mesmo, mais addicted do que tu...., não conheço :P

btw, Swimmer, espero mesmo que o prog funcione, se ainda tiveres tempo, faz um backup desse, e tenta aperfeiçoar o código da melhor forma possivel, mas deixa uma cópia desse intacta..., não vás estragar tudo, se é para mostrares do que vales ao prof, ao menos que mostres algo de jeito, ;)

um abraço HecKel

SwimmerBoy
29-10-2004, 02:03
Tou a tratar disso!!! Podes crer k o kermit não é viciado....Devias de ver as lutas k eu e o p4rthen0n temos para ver kem vê o forum 1º!!!

[[]]

Kermit the frog
29-10-2004, 02:07
Tou a tratar disso!!! Pode crer k o kermit não é viciado....Devias de ver as lutas k eu e o p4rthen0n temos para ver kem vê o forum 1º!!!

[[]]

ele ainda n é moderador para o tratares dessa maneira...
:007:

P4rthen0n
29-10-2004, 02:09
ele ainda n é moderador para o tratares dessa maneira...
:007:
Fucking owned :007: :-D

Heckel2win :lol:

Agora eh aperfeicoar o programa.

HecKel
29-10-2004, 12:51
De facto ser moderador do techzone é o meu sonho desde menino..., e só tomei conhecimento do forum aí há uns 2 meses..., iria ser uma mais valia no meu corriculum vitae ter lá Moderado do Techzonept.com...

Já pensaram em estudar ou fazer alguma coisa de util em vez de tarem para aqui a ver quem merece mais ou menos ter um cargo de responsabilidade que só dá trabalho..., há pois..., nem devem saber que o moderador de um forum tem de se sugeitar a criticas pelo que faz ou pelo que não faz, tem de ter sempre o forum actualizado para não deixar o forum cair no esquecimento, etc e tal...., talvez seria uma boa ideia os moderadores deste forum abrirem uma thread onde iriam postar o trabalho que têm feito no forum, assim talvez menos putos iriam criticar e mandar bocas uns aos outros a ver que merecer ser "mais ou menos" que o outro...

E crescerem um pouco? ainda vão a tempo....

um abraço HecKel

granado69
29-10-2004, 13:40
Ontem disseram-m uma cena em relação ao caminho mais curto:
Disseram-me q alem de se deslocar o menor numero de casas possivel tb tem que rodar o minimo de vezes possivel, no entando n é isso q diz no enunciado, espero bem q n seja preciso q rode o minimo de vezes possível senão tenho q reformular tudo....

Já agora ninguem conhece um debugger de pascal? O Dev-Pascal (q é o q temos q usar nos labs) traz o gdb mas n consigo por akilo a funcional, alem disso sp conheci o gdb como debugger de C, é suposto dar pra Pascal?

P4rthen0n
29-10-2004, 14:26
Isso de rodar o menor numero de vezes possivel eh fazer as deslocacoes todas em L em vez de ser em S. So assim eke o robot obedece ao menor numero de comandos. :)

Don't worry, alargaram ate 4 feira. ;)

SwimmerBoy
29-10-2004, 21:10
No enunciado não diz k é com o menor numero de casos possiveis!!!

Até 4ªfeira?!? Porreiro!!

Kain
26-11-2004, 04:08
lololol esta thread ja e uma beca antiga mas foi fixe ver uma beca de pascal de novo!

Ja na via nada disto ha uns aninhos!

P.s. Swimer em q escola andaste? n foi na FMP pois n?

SwimmerBoy
26-11-2004, 11:19
Olha o Kain....não andei no pragal, passei por lá bastantes vezes, mas não andei lá....andei na emidio e no monte

Kain
26-11-2004, 13:00
pois...... la tinhas uma coisa q dava muito jeito: Curso Tecnologico de Informatica.

Uma das cenas q davas em TLP( Tecnicas e Linguagens de Programação) era Pascal
Davas msm o basico mas ja ajudava gora a entender melhor algumas coisas :D

SwimmerBoy
26-11-2004, 15:52
Pois, mas o meu curso foi de electronica e não programação :die:

Kain
26-11-2004, 19:16
Lololol ao menos ja te safas melhor q eu em mods( pelo menos em teoria)

Kermit the frog
26-11-2004, 19:22
lololol esta thread ja e uma beca antiga mas foi fixe ver uma beca de pascal de novo!

Ja na via nada disto ha uns aninhos!

P.s. Swimer em q escola andaste? n foi na FMP pois n?


Eu andei na FMP...e digo-te foi porreiro enquanto existiu esse "curso" pois como disseste tinhas uma iniciação à programação.
10º ano - Pascal.
11º ano - C.

Contudo este ano, com a nova reforma, o pragal perdeu esse curso, ficando para outra escola da margem sul...

Bem agora falando do meu caso...eu tive essas matérias o problema foi basicamente dos profs que tive, o que fez que ao entrar na FCT (engenharia informatica) soubesse 0 de programação...foi quase como aprender pla primeira vez...numa certa parte tenho a culpa, mas comparando com os alunos que estão agora no 12º ano (pragal) nota-se que algo se passou no meu ano... ou seja eu sai de lá sem saber nada...eles saiem de lá bem preparados para seguir para um curso de programação ou faculdade (engenharia informática...)
too bad...

HecKel
26-11-2004, 19:58
De facto, tal como já te tinha dito..., um bom professor é meio caminho andado para o sucesso de um aluno, eu tive sorte de ter tido excelentes professores na minha escola, Infante D.Pedro em Alverca (escola velha :D), no entanto colegas meus que ainda devem lá estar......, ou não....., não sabem um décimo do que eu sabia quando sai de lá, o gosto pela programação, a vontade de aprender e ser auto-didacta são essenciais na vida de um programador, nos meus 2 ultimos anos na minha escola secundária fui avaliado até pelas brincadeiras que fazia em casa....

(isto vai soar mesmo mt falta de modéstia...)

Eu era um aluno exemplar nas matérias de programação, ao ponto de "competir" com um amigo meu nesta mesma área, competiamos não só em rapidez, mas também em performance, mal eu sabia que isso me ia dar jeito agora....

Nem sempre os professores são responsáveis pelo (ins)sucesso de um aluno, tal como disse anteriormente, são meio caminho andando, falta a outra metade, a tua metade!

um abraço HecKel

SwimmerBoy
26-11-2004, 20:13
Oiçam lá.....Asneirada e outros insultos. Acho que eram completamente desnecessários. Lêr Regra 6 sff

HecKel
26-11-2004, 20:27
PASCAL é assim k se escreve...., e se lesses bem disse Alverca, caso não saibas aparece no mapa SIM, e até tem um clubeco de futebol....

Asneirada e outros insultos. Acho que eram completamente desnecessários. Lêr Regra 6 sff

P4rthen0n
26-11-2004, 22:09
Oiçam lá.....Asneirada e outros insultos. Acho que eram completamente desnecessários. Lêr Regra 6 sff
can you say... *owned* ?? :x2:

Kain
27-11-2004, 00:16
lololololol esta M!#!"!# anda a lixar a carola td ao ppl!

Program LOL;
Begin
Write('lololololol esta M!#!"!# anda a lixar a carola td ao ppl!');
Readln;
End.

:x2: :x2: :x2: