# Last edited on 2018-04-03 19:41:54 by stolfilocal


def eh_letra(c):
  """Dada uma cadeia c de comprimento 1, Determina se eh letra (maiuscula ou minuscula) sem acentos."""
  
  return (c >= "a" and c <= "z") or (c >= "A" and c <= "Z")

def prox_palavra(f,k):
  """Retorna a primeira palavra de f que comeca na posicao k
  ou em diante.  Tambem retorna a posicao imediatamente apos
  a palavra encontrada. 
  
  Se nao houver mais palavras em f, retorna a cadeia vazia e zero."""
 
  n = len(f)
  
  # Avanca k ate o inicio de uma palavra:
  while k < n and not eh_letra(f[k]):
    k = k + 1
  
  # Neste ponto k >= n ou f[k] eh letra.
  if k >= n:
    return ("", 0)
  
  # Procura o fim da palavra:
  j = k + 1;
  while j < n and eh_letra(f[j]):
    j = j + 1
    
  # Retorna a palavra e a posicao logo apos o fim dela:
  return (f[k:j],j)

def pega_palavras(f):
  """Encontra as palavras da frase f e devolve as mesmas como elementos de uma lista."""
  kp = 0 # Proxima posicao de f a examinar.
  lis = [ ] # Lista das palavras.
  while True:
    # Pega a proxima palavra da frase e a posicao apos a mesma:
    (pa,kp) = prox_palavra(f,kp)
    if pa == "":
      return lis
    lis = lis + [ pa ]

def ocorrencias(p,L,i,j):
  """Conta o numero de ocorrencias da palavra p na lista L, desde 
  L[i] (inclusive) ate L[j] (exclusive)."""
  oc = 0
  for k in range(i,j):
    if L[k] == p:
      oc = oc + 1
  return oc

def conta_palavras(f):
  """Escreve na tela as palavras distintas da frase f, uma 
  em cada linha, com o numero de repeticoes."""
  lis = pega_palavras(f)
  np = len(lis) # Numero de palavras (contando repeticoes).
  for ip in range(np):
    pa = lis[ip]
    if ocorrencias(pa,lis,0,ip) == 0:
      oc = ocorrencias(pa,lis,ip,np)
      print(oc, pa)

while True:
  fr = input("frase? ")
  if fr == "@":
    break
  conta_palavras(fr)
  
print("tchau!")

