public static void main(String[] args) throws Exception {
		if (args.length < 1) {
			System.err.println("Usage: <input csv>");
			System.err.println("Example  ./fastoffering.sh sampleInput/wardList.csv");
			System.exit(1);
		}
		String inputFile = args[0];
		Map<Column, Integer> columnToIndex = new HashMap<Column, Integer>();
		columnToIndex.put(Column.FULL_NAME, 1);
		columnToIndex.put(Column.ADDRESS, 4);
		List<Person> persons = ParsingUtils.parseCsvFile(columnToIndex, inputFile);
		// System.out.println("read in " + persons.size() + " persons");
		List<Apartment> apts = ParsingUtils.putIntoApts(persons);

		List<Route> routes = new ArrayList<Route>();
		routes.add(createRoute());
		routes.add(createRoute2());
		routes.add(createRoute3());
		routes.add(createRoute4());
		routes.add(createRoute5());
		routes.add(createRoute6());
		routes.add(createRoute7());
		routes.add(createRoute8());

		List<Apartment> unassignedApartments = new ArrayList<Apartment>();
		List<Apartment> noAddressApartments = new ArrayList<Apartment>();
		for (Apartment apt : apts) {
			boolean assignedToRoute = false;
			for (Route route : routes) {
				if (route.isOnRoute(apt.getAddress())) {
					route.addApartment(apt);
					assignedToRoute = true;
					break;
				}
			}
			if (!assignedToRoute) {
				Address address = apt.getAddress();
				if (address != null && address.getStreet() != null && address.getStreet().length() != 0) {
					unassignedApartments.add(apt);
				} else {
					noAddressApartments.add(apt);
				}
			}
		}

		Map<String, List<Apartment>> apartmentMappings = new LinkedHashMap<String, List<Apartment>>();
		for (Route route : routes) {
			apartmentMappings.put(route.name, route.apartments);
		}
		apartmentMappings.put("Unassigned", unassignedApartments);
		apartmentMappings.put("No Address", noAddressApartments);

		outputReports(apartmentMappings);
	}