#!/usr/bin/python

import sys
import re

def mkMap(lst):
   return dict([(ref, "[%d]" % (n+1)) for n, ref in enumerate(lst)])

def asNum(line):
   try:
       key = int(line[1:].split(']', 1)[0])
   except:
       key = line or None  # If line looks wrong, just return the raw line
   return key

def footnote(in_s, usebody=False):
   # compile regexps
   my_re1 = re.compile(r"\[\d+\]")
   my_re2 = re.compile(r"(\[\d+\])")
   foot_split = "\n@footnote:\n"
   body, foots = in_s.split(foot_split)
   links   = list(set(my_re1.findall(body)))
   targets = list(set(my_re1.findall(foots)))
   mapping = mkMap(links if usebody else targets) # Ref order of body xor foots
   # Replace source->target footnote numbers
   def numsub(m):
       return mapping.get(m.group(1), "not_found")
   body  = my_re2.sub(numsub, body )
   foots = my_re2.sub(numsub, foots)
   # May need to reorder target lines in foots
   if usebody:
       foots = '\n'.join(sorted(foots.splitlines(), key=asNum))
   return body + foot_split + "\n" + foots.strip()

def main():
   print footnote(sys.stdin.read(), usebody='-a' in sys.argv[1:])

if __name__ == '__main__':
   main()