一、实验简介
本课程使用 Python3 抓取 12306 网站信息提供一个命令行的火车票查询工具。通过该项目的实现,可以熟悉 Python3 基础及网络编程,
以及 docopt,requests,prettytable 等库的使用。 课程教学视频:https://www.bilibili.com/video/av12380578/
1.1 知识点
Python 基础知识的综合运用
docopt、requests、colorama 及 prettytable 库的使用
setuptools 的使用
1.2 效果截图
二、接口设计
一个应用写出来最终是要给人使用的,哪怕只是给你自己使用。
所以,首先应该想想你希望怎么使用它?让我们先给这个小应用起个名字吧,既然涉及查询票务信息,那就叫它 tickets 好了。
我们希望用户只要输入出发站,到达站以及日期就能获得想要的信息,比如要查看10月10号上海-北京的火车余票, 我们只需输入:
$ python3 tickets.py 上海 北京 2016-10-10
注意:上面的日期(包括后面的)是笔者写文章时确定的日期,当你在做这个项目的时候可能要根据当前时间做适当调整。
转化为程序语言就是:
$ python tickets.py from to date
另外,火车有各种类型,高铁、动车、特快、快速和直达,我们希望可以提供选项只查询特定的一种或几种的火车,所以,我们应该有下面这些选项:
-g 高铁
-d 动车
-t 特快
-k 快速
-z 直达
这几个选项应该能被组合使用,所以,最终我们的接口应该是这个样子的:
$ python tickets.py [-gdtkz] from to date
接口已经确定好了,剩下的就是实现它了。
三、代码实现
首先安装一下实验需要用到的库:
$ sudo pip3 install requests prettytable docopt
$ sudo pip3 install --upgrade colorama #升级环境中的 colorama
requests,使用 Python 访问 HTTP 资源的必备库。
docopt,Python3 命令行参数解析工具。
prettytable, 格式化信息打印工具,能让你像 MySQL 那样打印数据。
colorama,命令行着色工具
3.1 解析参数
Python有很多写命令行参数解析工具,如 argparse, docopt, click,这里我们选用的是 docopt 这个简单易用的工具。docopt 可以按我们在文档字符串中定义的格式来解析参数,比如我们在 tickets.py 中写下下面的内容(实验楼环境下,通过点击右下角的键盘小图标可以选择中文输入法):
# coding: utf-8
"""命令行火车票查看器
Usage:
tickets [-gdtkz]
Options:
-h,--help 显示帮助菜单
-g 高铁
-d 动车
-t 特快
-k 快速
-z 直达
Example:
tickets 北京 上海 2016-10-10
tickets -dg 成都 南京 2016-10-10
"""
from docopt import docopt
def cli():
"""command-line interface"""
arguments = docopt(__doc__)
print(arguments)
if __name__ == '__main__':
cli()
上面的程序中, docopt 会根据我们在 docstring 中的定义的格式自动解析出参数并返回一个字典,也就是 arguments, 我们打印出了这个字典的内容。下面我们运行一下这个程序, 比如查询一下10月30号从成都到南京的动车和高铁:
$ python tickets.py -dg 成都 南京 2016-10-10
我们得到下面的参数解析结果:
3.2 获取数据
参数已经解析好了,下面就是如何获取数据了,这也是最主要的部分。首先我们用实验楼环境的Firefox浏览打开 12306,进入余票查询页面,按下 F12 打开开发者工具,选中 Network 一栏,在查询框中随便查询一次,我们在调试工具观察下请求和响应:
注意到上面的请求 URL ,它是由基 URL https://kyfw.12306.cn/otn/leftTicket/queryO 加四个参数构成的,这四个参数分别代表,查询的类型(成人?学生?),日期,出发车站,到达车站:
再来看看响应:
返回的是JSON格式的数据! 我们打开返回的数据看看:
可以看到一列火车的数据用 Python 的语言说就是一个字典。
接下来问题就简单了,我们只需要利用这个接口, 构建请求URL然后解析返回的JSON数据就可以了。但是我们发现,URL里面参数 from_station 和 to_station 并不是汉字,而是一个代号,而我们想要输入的是汉字,我们要如何获取代号呢?我们打开网页源码看看有没有什么发现。
果然,这里有个关于 station 的文件,打开看看:
station_names 是一个很长的字符串, 这里面貌似是包含了所有车站的中文名,拼音,简写和代号等信息。但是这些信息挤在一起,而我们只想要车站的拼音和大写字母的代号信息,怎么办呢? 正则表达式!我们写个小脚本来匹配提取出想要的信息吧, 在parse_station.py中:
import re
import requests
from pprint import pprint
url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8971'
response = requests.get(url, verify=False)
stations = re.findall(u'([\u4e00-\u9fa5]+)\|([A-Z]+)', response.text)
pprint(dict(stations), indent=4)
我们运行这个脚本,它将以字典的形式返回所有车站和它的大写字母代号, 我们将结果重定向到 stations.py 中,
$ python3 parse_station.py > stations.py
我们为这个字典加名字,stations, 最终,stations.py文件是这样的:
现在,用户输入车站的中文名,我们就可以直接从这个字典中获取它的字母代码了:
一下为完整代码:
tickets.py:
"""
tickets 程序
Usage:
tickets [-gdtkz]
Options:
-h --help Show this screen.
-g 高铁
-d 动车
-t 特快
-k 快速
-z 直达
Example:
tickets -gdt beijing shanghai 2016-11-12
"""
from docopt import docopt
import stations
import requests
from colorama import Fore
from prettytable import PrettyTable
def cli():
arguments = docopt(__doc__,version = "Tickets 1.0")
from_station = stations.get_telecode(arguments.get(""))
#获取地址和字符对应表的字母 因为是字典 可以用 字典.get 获取
to_station = stations.get_telecode(arguments.get(""))
date = arguments.get("")
options = "".join([key for key,value in arguments.items() if value is True]) #.items()因为遍历的是字典所以要加这个
url = ("https://kyfw.12306.cn/otn/leftTicket/query?"
"leftTicketDTO.train_date={}&"
"leftTicketDTO.from_station={}&"
"leftTicketDTO.to_station={}&"
"purpose_codes=ADULT").format(date,from_station,to_station)
r = requests.get(url,verify = False)
raw_trains = r.json()["data"]["result"]
#print(raw_trains)
#将r 转化为 json 字典
pt = PrettyTable()
pt._set_field_names("车次 车站 时间 历时 一等座 二等座 软卧 硬卧 硬座 无座".split())
for raw_train in raw_trains:
data_list = raw_train.split("|")
#print(data_list[2]) #长编号 所以2 不需要
train_no = data_list[3] #短编号 是车次
initial = train_no[0].lower() #显示的是大写之母 输入的是小写字母
if initial in options or initial in options:
from_station_code = data_list[6]
to_station_code = data_list[7]
from_station_name = ""#车站
to_station_name = "" #到达车站
start_time = data_list[8]#时间
arrive_time = data_list[9] #到达时间
time_duration = data_list[10] #历时
first_class_seat = data_list[31] or "--" #一等座
second_class_seat = data_list[30] or "--" #二等座
soft_sleep = data_list[23] or "--"#软卧
hard_sleep = data_list[28] or "--"#硬卧
hard_seat = data_list[29] or "--" #硬座
no_seat = data_list[33] or "--" #无座
pt.add_row([
train_no,
# "\n".join([Fore.GREEN + stations.get_name(from_station_code)+Fore.RESET,Fore.RED+stations.get_name(to_station_code)+Fore.RESET]),
# "\n".join([Fore.GREEN + start_time+Fore.RESET,Fore.RED+ arrive_time+Fore.RESET]),
"\n".join([stations.get_name(from_station_code),
stations.get_name(to_station_code)]),
"\n".join([start_time,arrive_time]),
time_duration,
first_class_seat,
second_class_seat,
soft_sleep,
hard_sleep,
hard_seat,
no_seat])
print(pt)
if __name__=="__main__":
cli()
parse_stations.py
import re
import requests
from pprint import pprint
#from stations import stations
def main():
url = "https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9053"
r = requests.get(url,verify = False)
pattern = u'([\u4e00-\u9fa5]+)\|([A-Z]+)'
#print(re.findall(pattern,r.text))
result = dict(re.findall(pattern,r.text))
print(result.keys())
print(result.values())
#pprint(dict(result),indent = 4) #把列表转化为字典
#indent 参数设置缩进
if __name__ == "__main__":
main()
stations.py
# -*- coding: utf-8-*-
names = ['北京北', '北京东', '北京', '北京南', '北京西', '广州南', '重庆北', '重庆', '重庆南', '重庆西', '广州东', '上海', '上海南', '上海虹桥', '上海西', '天津北', '天津', '天津南', '天津西', '长春', '长春南', '长春西', '成都东', '成都南', '成都', '长沙', '长沙南', '福州', '福州南', '贵阳', '广州', '广州西', '哈尔滨', '哈尔滨东', '哈尔滨西', '合肥', '合肥西', '呼和浩特东', '呼和浩特', '口东', '海口东', '海口', '杭州东', '杭州', '杭州南', '济南', '济南东', '济南西', '昆明', '昆明西', '拉萨', '兰州东', '兰州', '兰州西', '南昌', '南京', '南京南', '南宁', '石家庄北', '石家庄', '沈阳', '沈阳北', '沈阳东', '沈阳南', '太原北', '太原东', '太原', '武汉', '王家营西', '乌鲁木齐南', '西安北', '西安', '西安南', '西宁', '银川', '郑州', '阿尔山', '安康', '阿克苏', '阿里河', '阿拉山口', '安平', '安庆', '安顺', '鞍山', '安阳', '北安', '蚌埠', '白城', '北海', '白河', '白涧', '宝鸡', '滨江', '博克图', '百色', '白山市', '北台', '包头东', '包头', '北屯市', '本溪', '白云鄂博', '白银西', '亳州', '赤壁', '常德', '承德', '长甸', '赤峰', '茶陵', '苍南', '昌平', '崇仁', '昌图', '长汀镇', '曹县', '楚雄南', '陈相屯', '长治北', '池州', '长征', '常州', '郴州', '长治', '沧州', '崇左', '大安北', '大成', '丹东', '东方红', '东莞东', '大虎山', '敦煌', '敦化', '德惠', '东京城', '大涧', '都江堰', '大连北', '大理', '大连', '定南', '大庆', '东胜', '大石桥', '大同', '东营', '大杨树', '都匀', '邓州', '达州', '德州', '额济纳', '二连', '恩施', '福鼎', '凤凰机场', '风陵渡', '涪陵', '富拉尔基', '抚顺北', '佛山', '阜新南', '阜阳', '格尔木', '广汉', '古交', '桂林北', '古莲', '桂林', '固始', '广水', '干塘', '广元', '广州北', '赣州', '公主岭', '公主岭南', '淮安', '淮北', '鹤北', '淮滨', '河边', '潢川', '韩城', '邯郸', '横道河子', '鹤岗', '皇姑屯', '红果', '黑河', '怀化', '汉口', '葫芦岛', '海拉尔', '霍林郭勒', '海伦', '侯马', '哈密', '淮南', '桦南', '海宁西', '鹤庆', '怀柔北', '怀柔', '黄石东', '华山', '黄山', '黄石', '衡水', '衡阳', '菏泽', '贺州', '汉中', '惠州', '吉安', '集安', '江边村', '晋城', '金城江', '景德镇', '嘉峰', '加格达奇', '井冈山', '蛟河', '金华南', '金华', '九江', '吉林', '荆门', '佳木斯', '济宁', '集宁南', '酒泉', '江山', '吉首', '九台', '镜铁山', '鸡西', '绩溪县', '嘉峪关', '江油', '锦州', '金州', '蓟州', '库尔勒', '开封', '岢岚', '凯里', '喀什', '昆山南', '奎屯', '开原', '六安', '灵宝', '芦潮港', '隆昌', '陆川', '利川', '临川', '潞城', '鹿道', '娄底', '临汾', '良各庄', '临河', '漯河', '绿化', '隆化', '丽江', '临江', '龙井', '吕梁', '醴陵', '柳林南', '滦平', '六盘水', '灵丘', '旅顺', '兰溪', '陇西', '澧县', '临西', '龙岩', '耒阳', '洛阳', '连云港东', '洛阳东', '临沂', '洛阳龙门', '柳园', '凌源', '辽源', '立志', '柳州', '辽中', '麻城', '免渡河', '牡丹江', '莫尔道嘎', '明光', '满归', '漠河', '茂名', '茂名西', '密山', '马三家', '麻尾', '绵阳', '梅州', '满洲里', '宁波东', '宁波', '南岔', '南充', '南丹', '南大庙', '南芬', '讷河', '嫩江', '内江', '南平', '南通', '南阳', '碾子山', '平顶山', '盘锦', '平凉', '平凉南', '平泉', '坪石', '萍乡', '凭祥', '郫县西', '攀枝花', '蕲春', '青城山', '青岛', '清河城', '曲靖', '黔江', '前进镇', '齐齐哈尔', '七台河', '沁县', '泉州东', '泉州', '衢州', '融安', '汝箕沟', '瑞金', '日照', '双城堡', '绥芬河', '韶关东', '山海关', '绥化', '三间房', '苏家屯', '舒兰', '三明', '神木南', '三门峡', '商南', '遂宁', '四平', '商丘', '上饶', '韶山', '宿松', '汕头', '邵武', '涉县', '三亚', '亚', '邵阳', '十堰', '双鸭山', '松原', '苏州', '深圳', '宿州', '随州', '朔州', '深圳西', '塘豹', '塔尔气', '潼关', '塘沽', '塔河', '通化', '泰来', '吐鲁番', '通辽', '铁岭', '陶赖昭', '图们', '铜仁', '唐山北', '田师府', '泰山', '唐山', '天水', '通远堡', '太阳升', '泰州', '桐梓', '通州西', '五常', '武昌', '瓦房店', '威海', '芜湖', '乌海西', '吴家屯', '武隆', '乌兰浩特', '渭南', '威舍', '歪头山', '武威', '武威南', '无锡', '乌西', '乌伊岭', '武夷山', '万源', '万州', '梧州', '温州', '温州南', '西昌', '许昌', '西昌南', '香坊', '轩岗', '兴国', '宣汉', '新会', '新晃', '锡林浩特', '兴隆县', '厦门北', '厦门', '厦门高崎', '小市', '秀山', '向塘', '宣威', '新乡', '信阳', '咸阳', '襄阳', '熊岳城', '新沂', '兴义', '新余', '徐州', '延安', '宜宾', '亚布力南', '叶柏寿', '宜昌东', '永川', '盐城', '宜昌', '运城', '伊春', '榆次', '杨村', '宜春西', '伊尔施', '燕岗', '永济', '延吉', '营口', '牙克石', '阎良', '玉林', '榆林', '亚龙湾', '一面坡', '伊宁', '阳平关', '玉屏', '原平', '延庆', '阳泉曲', '玉泉', '阳泉', '营山', '玉山', '燕山', '榆树', '鹰潭', '烟台', '伊图里河', '玉田县', '义乌', '阳新', '义县', '益阳', '岳阳', '崖州', '永州', '扬州', '淄博', '镇城底', '自贡', '珠海', '珠海北', '湛江', '镇江', '张家界', '张家口', '张家口南', '周口', '哲里木', '扎兰屯', '驻马店', '肇庆', '周水子', '昭通', '中卫', '资阳', '遵义西', '枣庄', '资中', '株洲', '枣庄西', '昂昂溪', '阿城', '安达', '安德', '安定', '安多', '安广', '敖汉', '艾河', '安化', '艾家村', '鳌江', '安家', '阿金', '安靖', '阿克陶', '安口窑', '敖力布告', '安龙', '阿龙山', '安陆', '阿木尔', '阿南庄', '安庆西', '鞍山西', '安塘', '安亭北', '阿图什', '安图', '安溪', '博鳌', '北碚', '白壁关', '蚌埠南', '巴楚', '板城', '北戴河', '保定', '宝坻', '八达岭', '巴东', '柏果', '布海', '白河东', '贲红', '宝华山', '白河县', '白芨沟', '碧鸡关', '北滘', '碧江', '白鸡坡', '笔架山', '八角台', '保康', '白奎堡', '白狼', '百浪', '博乐', '宝拉格', '巴林', '宝林', '北流', '勃利', '布列开', '宝龙山', '百里峡', '八面城', '班猫箐', '八面通', '北马圈子', '北票南', '白旗', '宝泉岭', '白泉', '巴山', '白水江', '白沙坡', '白石山', '白水镇', '东', '坂田', '泊头', '北屯', '本溪湖', '博兴', '八仙筒', '白音察干', '背荫河', '北营', '巴彦高勒', '白音他拉', '鲅鱼圈', '白银市', '白音胡硕', '巴中', '霸州', '北宅', '赤壁北', '查布嘎', '长城', '长冲', '承德东', '赤峰西', '嵯岗', '柴岗', '长葛', '柴沟堡', '城固', '陈官营', '成高子', '草海', '柴河', '册亨', '草河口', '崔黄口', '巢湖', '蔡家沟', '成吉思汗', '岔江', '蔡家坡', '昌乐', '超梁沟', '慈利', '昌黎', '长岭子', '晨明', '长农', '昌平北', '常平', '长坡岭', '辰清', '蔡山', '楚山', '长寿', '磁山', '苍石', '草市', '察素齐', '长山屯', '长汀', '朝天南', '昌图西', '春湾', '磁县', '岑溪', '辰溪', '磁西', '长兴南', '磁窑', '春阳', '城阳', '创业村', '朝阳川', '朝阳地', '朝阳南', '长垣', '朝阳镇', '滁州北', '常州北', '滁州', '潮州', '常庄', '曹子里', '车转湾', '郴州西', '沧州西', '德安', '大安', '大坝', '大板', '大巴', '到保', '定边', '东边井', '德伯斯', '打柴沟', '德昌', '滴道', '大磴沟', '刀尔登', '得耳布尔', '杜尔伯特', '东方', '丹凤', '东丰', '都格', '大官屯', '大关', '东光', '东海', '大灰厂', '大红旗', '大禾塘', '东海县', '德惠西', '达家沟', '东津', '杜家', '大口屯', '东来', '德令哈', '大陆号', '带岭', '大林', '达拉特旗', '独立屯', '豆罗', '达拉特西', '大连西', '东明村', '洞庙河', '东明县', '大拟', '大平房', '大盘石', '大埔', '大堡', '大庆东', '大其拉哈', '道清', '对青山', '德清西', '大庆西', '东升', '砀山', '独山', '登沙河', '读书铺', '大石头', '东胜西', '大石寨', '东台', '定陶', '灯塔', '大田边', '东通化', '丹徒', '大屯', '东湾', '大武口', '低窝铺', '大王滩', '大湾子', '大兴沟', '大兴', '定西', '甸心', '东乡', '代县', '定襄', '东戌', '东辛庄', '丹阳', '德阳', '大雁', '当阳', '丹阳北', '大英东', '东淤地', '大营', '定远', '岱岳', '大元', '大营镇', '大营子', '大战场', '德州东', '东至', '低庄', '东镇', '道州', '东庄', '兑镇', '豆庄', '定州', '大竹园', '大杖子', '豆张庄', '峨边', '二道沟门', '二道湾', '鄂尔多斯', '二龙', '二龙山屯', '峨眉', '二密河', '二营', '鄂州', '福安', '丰城', '丰城南', '肥东', '发耳', '富海', '福海', '凤凰城', '汾河', '奉化', '富锦', '范家屯', '福利区', '福利屯', '丰乐镇', '阜南', '阜宁', '抚宁', '福清', '福泉', '丰水村', '丰顺', '繁峙', '抚顺', '福山口', '扶绥', '冯屯', '浮图峪', '富县东', '凤县', '富县', '费县', '凤阳', '汾阳', '扶余北', '分宜', '富源', '扶余', '富裕', '抚州北', '凤州', '丰镇', '范镇', '固安', '广安', '高碑店', '沟帮子', '甘草店', '谷城', '藁城', '高村', '古城镇', '广德', '贵定', '贵定南', '古东', '贵港', '官高', '葛根庙', '干沟', '甘谷', '高各庄', '甘河', '根河', '郭家店', '孤家子', '古浪', '皋兰', '高楼房', '归流河', '关林', '甘洛', '郭磊庄', '高密', '公庙子', '工农湖', '广宁寺南', '广南卫', '高平', '甘泉北', '共青城', '甘旗卡', '甘泉', '高桥镇', '灌水', '赶水', '孤山口', '果松', '高山子', '嘎什甸子', '高台', '高滩', '古田', '官厅', '官厅西', '贵溪', '涡阳', '巩义', '高邑', '巩义南', '广元南', '固原', '菇园', '公营子', '光泽', '古镇', '固镇', '虢镇', '瓜州', '高州', '盖州', '官字井', '冠豸山', '盖州西', '淮安南', '红安', '海安县', '红安西', '黄柏', '海北', '鹤壁', '会昌北', '华城', '河唇', '汉川', '海城', '合川', '黑冲滩', '黄村', '海城西', '化德', '洪洞', '霍尔果斯', '横峰', '韩府湾', '汉沽', '黄瓜园', '红光镇', '浑河', '红花沟', '黄花筒', '贺家店', '和静', '红江', '黑井', '获嘉', '河津', '涵江', '华家', '杭锦后旗', '河间西', '花家庄', '河口南', '湖口', '黄口', '呼兰', '葫芦岛北', '浩良河', '哈拉海', '鹤立', '桦林', '黄陵', '海林', '虎林', '寒岭', '和龙', '海龙', '哈拉苏', '呼鲁斯太', '火连寨', '黄梅', '韩麻营', '黄泥河', '海宁', '惠农', '和平', '花棚子', '花桥', '宏庆', '怀仁', '华容', '华山北', '黄松甸', '和什托洛盖', '红山', '汉寿', '衡山', '黑水', '惠山', '虎什哈', '红寺堡', '虎石台', '海石湾', '衡山西', '红砂岘', '黑台', '桓台', '和田', '会同', '海坨子', '黑旺', '海湾', '红星', '徽县', '红兴隆', '换新天', '红岘台', '红彦', '合阳', '海阳', '衡阳东', '华蓥', '汉阴', '黄羊滩', '汉源', '河源', '花园', '湟源', '黄羊镇', '湖州', '化州', '黄州', '霍州', '惠州西', '巨宝', '靖边', '金宝屯', '晋城北', '金昌', '鄄城', '交城', '建昌', '峻德', '井店', '鸡东', '江都', '鸡冠山', '金沟屯', '静海', '金河', '锦河', '精河', '精河南', '江华', '建湖', '纪家沟', '晋江', '锦界', '姜家', '江津', '金坑', '芨岭', '金马村', '江门东', '角美', '莒南', '井南', '建瓯', '经棚', '江桥', '九三', '金山北', '嘉善', '京山', '建始', '稷山', '吉舒', '建设', '甲山', '建三江', '嘉善南', '金山屯', '江所田', '景泰', '九台南', '吉文', '进贤', '莒县', '嘉祥', '介休', '嘉兴', '井陉', '嘉兴南', '夹心子', '姜堰', '揭阳', '建阳', '简阳', '巨野', '江永', '缙云', '靖远', '江源', '济源', '靖远西', '胶州北', '焦作东', '金寨', '靖州', '荆州', '胶州', '晋州', '锦州南', '焦作', '旧庄窝', '金杖子', '开安', '库车', '康城', '库都尔', '宽甸', '克东', '昆都仑召', '开江', '康金井', '喀喇其', '开鲁', '克拉玛依', '口前', '昆山', '奎山', '克山', '开通', '康熙岭', '昆阳', '克一河', '开原西', '康庄', '来宾', '老边', '灵宝西', '龙川', '乐昌', '黎城', '聊城', '蓝村', '两当', '林东', '乐都', '梁底下', '六道河子', '鲁番', '廊坊', '落垡', '廊坊北', '老府', '兰岗', '龙骨甸', '芦沟', '龙沟', '拉古', '临海', '林海', '拉哈', '凌海', '柳河', '六合', '龙华', '滦河沿', '六合镇', '亮甲店', '刘家店', '刘家河', '连江', '庐江', '李家', '罗江', '廉江', '两家', '龙江', '龙嘉', '莲江口', '蔺家楼', '李家坪', '兰考', '林口', '路口铺', '老莱', '拉林', '陆良', '龙里', '临澧', '兰棱', '零陵', '卢龙', '喇嘛甸', '里木店', '洛门', '龙南', '梁平', '罗平', '落坡岭', '六盘山', '乐平市', '临清', '龙泉寺', '乐山北', '乐善村', '冷水江东', '连山关', '流水沟', '丽水', '陵水', '罗山', '鲁山', '梁山', '灵石', '露水河', '庐山', '林盛堡', '柳树屯', '龙山镇', '梨树镇', '李石寨', '黎塘', '轮台', '芦台', '龙塘坝', '濑湍', '骆驼巷', '李旺', '莱芜东', '狼尾山', '灵武', '莱芜西', '朗乡', '陇县', '临湘', '芦溪', '莱西', '林西', '滦县', '略阳', '莱阳', '辽阳', '临沂北', '凌源东', '连云港', '临颍', '老营', '龙游', '罗源', '林源', '涟源', '涞源', '耒阳西', '临泽', '龙爪沟', '雷州', '六枝', '鹿寨', '来舟', '龙镇', '拉鲊', '兰州新区', '马鞍山', '毛坝', '毛坝关', '麻城北', '渑池', '明城', '庙城', '渑池南', '茅草坪', '猛洞河', '磨刀石', '弥渡', '帽儿山', '明港', '梅河口', '马皇', '孟家岗', '美兰', '汨罗东', '马莲河', '茅岭', '庙岭', '茂林', '穆棱', '马林', '马龙', '木里图', '汨罗', '玛纳斯湖', '冕宁', '沐滂', '马桥河', '闽清', '民权', '明水河', '麻山', '眉山', '漫水湾', '茂舍祖', '米沙子', '美溪', '勉县', '麻阳', '密云北', '米易', '麦园', '墨玉', '庙庄', '米脂', '明珠', '宁安', '农安', '南博山', '南仇', '南城司', '宁村', '宁德', '南观村', '南宫东', '南关岭', '宁国', '宁海', '南华北', '南河川', '泥河子', '宁家', '南靖', '牛家', '能家', '南口', '南口前', '南朗', '乃林', '尼勒克', '那罗', '宁陵县', '奈曼', '宁明', '南木', '南平南', '那铺', '南桥', '那曲', '暖泉', '南台', '南头', '宁武', '南湾子', '南翔北', '宁乡', '内乡', '牛心台', '南峪', '娘子关', '南召', '南杂木', '蓬安', '平安', '平安驿', '磐安镇', '平安镇', '蒲城东', '蒲城', '裴德', '偏店', '平顶山西', '坡底下', '瓢儿屯', '平房', '平岗', '平关', '盘关', '平果', '徘徊北', '平河口', '平湖', '盘锦北', '潘家店', '皮口南', '普兰店', '偏岭', '平山', '彭山', '皮山', '磐石', '平社', '彭水', '平台', '平田', '莆田', '葡萄菁', '普湾', '平旺', '平型关', '普雄', '郫县', '平洋', '彭阳', '平遥', '平邑', '平原堡', '平原', '平峪', '彭泽', '邳州', '平庄', '泡子', '平庄南', '乾安', '庆安', '迁安', '祁东北', '七甸', '曲阜东', '庆丰', '奇峰塔', '曲阜', '琼海', '秦皇岛', '千河', '清河', '清河门', '清华园', '全椒', '渠旧', '潜江', '秦家', '綦江', '祁家堡', '清涧县', '秦家庄', '七里河', '秦岭', '渠黎', '青龙', '青龙山', '祁门', '前磨头', '青山', '确山', '前山', '清水', '戚墅堰', '青田', '桥头', '青铜峡', '前卫', '前苇塘', '渠县', '祁县', '青县', '桥西', '清徐', '旗下营', '千阳', '沁阳', '泉阳', '祁阳北', '七营', '庆阳山', '清远', '清原', '钦州东', '钦州', '青州市', '瑞安', '荣昌', '瑞昌', '如皋', '容桂', '任丘', '乳山', '融水', '热水', '容县', '饶阳', '汝阳', '绕阳河', '汝州', '石坝', '上板城', '施秉', '上板城南', '世博园', '双城北', '舒城', '商城', '莎车', '顺昌', '神池', '沙城', '石城', '山城镇', '山丹', '顺德', '绥德', '水洞', '商都', '十渡', '四道湾', '顺德学院', '绅坊', '双丰', '四方台', '水富', '三关口', '桑根达来', '韶关', '上高镇', '上杭', '沙海', '蜀河', '松河', '沙河', '沙河口', '赛汗塔拉', '沙河市', '沙后所', '山河屯', '三河县', '四合永', '三汇镇', '双河镇', '石河子', '三合庄', '三家店', '水家湖', '沈家河', '松江河', '尚家', '孙家', '沈家', '双吉', '松江', '三江口', '司家岭', '松江南', '石景山南', '邵家堂', '三江县', '三家寨', '十家子', '松江镇', '施家嘴', '深井子', '什里店', '疏勒', '疏勒河', '舍力虎', '石磷', '石林', '双辽', '绥棱', '石岭', '石林南', '石龙', '萨拉齐', '索伦', '商洛', '沙岭子', '石门县北', '三门峡南', '三门县', '石门县', '三门峡西', '肃宁', '宋', '双牌', '沙坪坝', '四平东', '遂平', '沙坡头', '沙桥', '商丘南', '水泉', '石泉县', '石桥子', '石人城', '石人', '山市', '神树', '鄯善', '三水', '泗水', '石山', '松树', '首山', '三十家', '三十里堡', '松树镇', '松桃', '索图罕', '三堂集', '石头', '神头', '沙沱', '上万', '孙吴', '沙湾县', '歙县', '遂溪', '沙县', '绍兴', '石岘', '上西铺', '石峡子', '沭阳', '绥阳', '寿阳', '水洋', '三阳川', '上腰墩', '三营', '顺义', '三义井', '三源浦', '上虞', '三原', '上园', '水源', '桑园子', '绥中北', '苏州北', '宿州东', '深圳东', '深州', '孙镇', '绥中', '尚志', '师庄', '松滋', '师宗', '苏州园区', '苏州新区', '泰安', '台安', '通安驿', '桐柏', '通北', '桐城', '汤池', '郯城', '铁厂', '桃村', '通道', '田东', '天岗', '土贵乌拉', '通沟', '太谷', '塔哈', '棠海', '唐河', '泰和', '太湖', '团结', '谭家井', '陶家屯', '唐家湾', '统军庄', '吐列毛杜', '图里河', '铜陵', '田林', '亭亮', '铁力', '铁岭西', '图们北', '天门', '天门南', '太姥山', '土牧尔台', '土门子', '洮南', '潼南', '太平川', '太平镇', '图强', '台前', '天桥岭', '土桥子', '汤山城', '桃山', '塔石嘴', '通途', '汤旺河', '同心', '土溪', '桐乡', '田阳', '天义', '汤阴', '驼腰岭', '太阳山', '汤原', '塔崖驿', '滕州东', '台州', '天祝', '滕州', '天镇', '桐子林', '天柱山', '文安', '武安', '王安镇', '吴堡', '旺苍', '五叉沟', '文昌', '温春', '五大连池', '文登', '五道沟', '五道河', '文地', '卫东', '武当山', '望都', '乌尔旗汗', '潍坊', '万发屯', '王府', '瓦房店西', '王岗', '武功', '湾沟', '吴官田', '乌海', '苇河', '卫辉', '吴家川', '五家', '威箐', '午汲', '渭津', '王家湾', '倭肯', '五棵树', '五龙背', '乌兰哈达', '万乐', '瓦拉干', '温岭', '五莲', '乌拉特前旗', '乌拉山', '卧里屯', '渭南北', '乌奴耳', '万宁', '万年', '渭南南', '渭南镇', '沃皮', '吴桥', '汪清', '武清', '武山', '文水', '魏善庄', '王瞳', '五台山', '王团庄', '五五', '无锡东', '卫星', '闻喜', '武乡', '无锡新区', '武穴', '吴圩', '王杨', '武义', '五营', '瓦窑田', '五原', '苇子沟', '韦庄', '五寨', '王兆屯', '微子镇', '魏杖子', '新安', '兴安', '新安县', '新保安', '下板城', '西八里', '宣城', '兴城', '小村', '新绰源', '下城子', '新城子', '喜德', '小得江', '西大庙', '小董', '小东', '信丰', '襄汾', '息烽', '新干', '孝感', '西固城', '西固', '夏官营', '西岗子', '襄河', '新和', '宣和', '斜河涧', '新华屯', '新华', '新化', '宣化', '兴和西', '小河沿', '下花园', '小河镇', '徐家', '峡江', '新绛', '辛集', '新江', '西街口', '许家屯', '许家台', '谢家镇', '兴凯', '小榄', '香兰', '兴隆店', '新乐', '新林', '小岭', '新李', '西林', '西柳', '仙林', '新立屯', '兴隆镇', '新立镇', '新民', '西麻山', '下马塘', '孝南', '咸宁北', '兴宁', '咸宁', '犀浦东', '西平', '兴平', '新坪田', '霞浦', '溆浦', '犀浦', '新青', '新邱', '兴泉堡', '仙人桥', '小寺沟', '杏树', '浠水', '下社', '徐水', '夏石', '小哨', '新松浦', '杏树屯', '许三湾', '湘潭', '邢台', '仙桃西', '下台子', '徐闻', '新窝铺', '修武', '新县', '息县', '西乡', '湘乡', '西峡', '孝西', '小新街', '新兴县', '西小召', '小西庄', '向阳', '旬阳', '旬阳北', '襄阳东', '兴业', '小雨谷', '信宜', '小月旧', '小扬气', '襄垣', '夏邑县', '祥云西', '新友谊', '新阳镇', '徐州东', '新帐房', '悬钟', '新肇', '忻州', '汐子', '西哲里木', '新杖子', '姚安', '依安', '永安', '永安乡', '亚布力', '元宝山', '羊草', '秧草地', '阳澄湖', '迎春', '叶城', '盐池', '砚川', '阳春', '宜城', '应城', '禹城', '晏城', '阳城', '阳岔', '郓城', '雁翅', '云彩岭', '虞城县', '营城子', '英德', '永登', '尹地', '永定', '雁荡山', '于都', '园墩', '英德西', '永丰营', '杨岗', '阳高', '阳谷', '友好', '余杭', '沿河城', '岩会', '羊臼河', '永嘉', '营街', '盐津', '余江', '燕郊', '姚家', '岳家井', '一间堡', '英吉沙', '云居寺', '燕家庄', '永康', '营口东', '银浪', '永郎', '宜良北', '永乐店', '伊拉哈', '伊林', '杨陵', '彝良', '杨林', '余粮堡', '杨柳青', '月亮田', '义马', '阳明堡', '玉门', '云梦', '元谋', '一面山', '沂南', '宜耐', '伊宁东', '营盘水', '羊堡', '阳泉北', '乐清', '焉耆', '源迁', '姚千户屯', '阳曲', '榆树沟', '月山', '玉石', '玉舍', '偃师', '沂水', '榆社', '颍上', '窑上', '元氏', '杨树岭', '野三坡', '榆树屯', '榆树台', '鹰手营子', '源潭', '牙屯堡', '烟筒山', '烟筒屯', '羊尾哨', '越西', '攸县', '永修', '玉溪西', '弋阳', '余姚', '酉阳', '岳阳东', '阳邑', '鸭园', '鸳鸯镇', '燕子砭', '仪征', '宜州', '兖州', '迤资', '羊者窝', '杨杖子', '镇安', '治安', '招柏', '张百湾', '中川机场', '枝城', '子长', '诸城', '邹城', '赵城', '章党', '正定', '肇东', '照福铺', '章古台', '赵光', '中和', '中华门', '枝江北', '钟家村', '朱家沟', '紫荆关', '周家', '诸暨', '镇江南', '周家屯', '褚家湾', '湛江西', '朱家窑', '曾家坪子', '张兰', '镇赉', '枣林', '扎鲁特', '扎赉诺尔西', '樟木头', '中牟', '中宁东', '中宁', '中宁南', '镇平', '漳平', '泽普', '枣强', '张桥', '章丘', '朱日和', '泽润里', '中山北', '樟树东', '珠斯花', '中山', '柞水', '钟山', '樟树', '珠窝', '张维屯', '彰武', '棕溪', '钟祥', '资溪', '镇西', '张辛', '正镶白旗', '紫阳', '枣阳', '竹园坝', '张掖', '镇远', '漳州东', '漳州', '壮志', '子洲', '中寨', '涿州', '咋子', '卓资山', '株洲西', '郑州西', '阿巴嘎旗', '阿尔山北', '阿勒泰', '安仁', '安顺西', '安图西', '安阳东', '博白', '八步', '栟茶', '保定东', '八方山', '白沟', '滨海', '滨海北', '宝鸡南', '北井子', '白马井', '宝清', '璧山', '白沙铺', '白水县', '板塘', '本溪新城', '彬县', '宾阳', '白洋淀', '百宜', '白音华南', '巴中东', '滨州', '霸州西', '澄城', '城固北', '查干湖', '巢湖东', '从江', '茶卡', '长临河', '茶陵南', '常平东', '常平南', '长庆桥', '长寿北', '长寿湖', '常山', '潮汕', '长沙西', '朝天', '长汀南', '长武', '长兴', '苍溪', '长阳', '潮阳', '城子坦', '东安东', '德保', '都昌', '东岔', '东城南', '东戴河', '丹东西', '东二道河', '大丰', '大方南', '东港北', '大孤山', '东莞', '鼎湖东', '鼎湖山', '道滘', '洞井', '垫江', '大苴', '大荔', '大朗镇', '大青沟', '德清', '东胜东', '砀山南', '大石头南', '当涂东', '大通西', '大旺', '定西北', '德兴东', '德兴', '丹霞山', '大冶北', '都匀东', '东营南', '大余', '定州东', '端州', '大足南', '峨眉山', '阿房宫', '鄂州东', '防城港北', '凤城东', '富川', '繁昌西', '丰都', '涪陵北', '枫林', '富宁', '佛坪', '法启', '芙蓉南', '复盛', '抚松', '佛山西', '福山镇', '福田', '富源北', '抚远', '抚州东', '抚州', '高安', '广安南', '贵安', '高碑店东', '恭城', '藁城南', '贵定北', '葛店南', '贵定县', '广汉北', '高花', '革居', '关岭', '桂林西', '光明城', '广宁', '广宁寺', '广南县', '桂平', '弓棚子', '赶水东', '光山', '谷山', '观沙岭', '古田北', '广通北', '高台南', '古田会址', '贵阳北', '贵阳东', '高邑西', '惠安', '淮北北', '鹤壁东', '寒葱沟', '霍城', '珲春', '邯郸东', '惠东', '哈达铺', '海东西', '洪洞西', '哈尔滨北', '合肥北城', '合肥南', '黄冈', '黄冈东', '横沟桥东', '黄冈西', '洪河', '怀化南', '黄河景区', '花湖', '惠环', '后湖', '怀集', '河口北', '黄流', '黄陵南', '鲘门', '虎门', '侯马西', '衡南', '淮南东', '合浦', '霍邱', '怀仁东', '华容东', '华容南', '黄石北', '黄山北', '衡水北', '贺胜桥东', '和硕', '花山南', '荷塘', '黄土店', '合阳北', '海阳北', '槐荫', '鄠邑', '花园口', '霍州东', '惠州南', '建安', '泾川', '景德镇北', '旌德', '尖峰', '近海', '蛟河西', '军粮城北', '将乐', '贾鲁河', '九郎山', '即墨北', '剑门关', '建宁县北', '江宁', '江宁西', '建瓯西', '酒泉南', '句容西', '建水', '尖山', '界首市', '绩溪北', '介休东', '泾县', '靖西', '进贤南', '江油北', '嘉峪关南', '简阳南', '金银潭', '靖宇', '金月湾', '缙云西', '晋中', '景州', '开封北', '开福寺', '开化', '凯里南', '库伦', '昆明南', '葵潭', '开阳', '隆安东', '来宾北', '灵璧', '寮步', '绿博园', '隆昌北', '乐昌东', '临城', '罗城', '陵城', '老城镇', '龙洞堡', '乐都南', '娄底南', '乐东', '离堆公园', '陆丰', '龙丰', '禄丰南', '临汾西', '临高南', '麓谷', '滦河', '珞璜南', '漯河西', '罗江东', '柳江', '利津南', '兰考南', '龙口市', '兰陵北', '龙里北', '沥林北', '醴陵东', '陇南', '梁平南', '礼泉', '灵石东', '乐山', '龙市', '溧水', '娄山关南', '洛湾三江', '莱西北', '溧阳', '临邑', '柳园南', '鹿寨北', '阆中', '临泽南', '马鞍山东', '毛陈', '明港东', '民和南', '闵集', '马兰', '民乐', '弥勒', '玛纳斯', '牟平', '闽清北', '民权北', '眉山东', '庙山', '岷县', '门源', '暮云', '蒙自北', '孟庄', '蒙自', '南部', '南曹', '南充北', '南城', '南昌西', '宁东南', '宁东', '南芬北', '南丰', '南湖东', '内江北', '南江', '南江口', '南陵', '尼木', '南宁东', '南宁西', '南平北', '宁强南', '南雄', '纳雍', '南阳寨', '普安', '普安县', '屏边', '平坝南', '平昌', '普定', '平度', '皮口', '盘龙城', '蓬莱市', '普宁', '平南南', '彭山北', '盘山', '坪上', '萍乡北', '鄱阳', '濮阳', '平遥古城', '平原东', '普者黑', '盘州', '彭州', '秦安', '青白江东', '青川', '青岛北', '祁东', '青堆', '前锋', '曲靖北', '綦江东', '曲江', '青莲', '齐齐哈尔南', '清水北', '青神', '岐山', '庆盛', '清水县', '曲水县', '祁县东', '乾县', '旗下营南', '祁阳', '全州南', '棋子湾', '仁布', '荣昌北', '荣成', '瑞昌西', '如东', '榕江', '日喀则', '饶平', '宋城路', '三道湖', '邵东', '三都县', '胜芳', '双峰北', '商河', '泗洪', '四会', '石家庄东', '三江南', '三井子', '双流机场', '石林西', '沙岭子西', '双流西', '三明北', '嵩明', '树木岭', '神木', '苏尼特左旗', '山坡东', '石桥', '沈丘', '鄯善北', '狮山北', '三水北', '松山湖北', '狮山', '三水南', '韶山南', '三穗', '石梯', '汕尾', '歙县北', '绍兴北', '绍兴东', '泗县', '始兴', '泗阳', '双阳', '邵阳北', '松原北', '山阴', '深圳北', '神州', '深圳坪山', '石嘴山', '石柱县', '台安南', '桃村北', '田东北', '土地堂东', '太谷西', '吐哈', '通海', '太和北', '天河机场', '天河街', '通化县', '同江', '铜陵北', '吐鲁番北', '泰宁', '铜仁南', '天水南', '通渭', '田心东', '汤逊湖', '藤县', '太原南', '通远堡西', '桐梓北', '桐梓东', '通州', '文登东', '五府山', '威虎岭北', '威海北', '乌兰察布', '五龙背东', '乌龙泉南', '乌鲁木齐', '五女山', '武胜', '五通', '无为', '瓦屋山', '闻喜西', '武义北', '武夷山北', '武夷山东', '婺源', '渭源', '万州北', '武陟', '梧州南', '兴安北', '许昌东', '项城', '新都东', '西丰', '先锋', '湘府路', '襄汾西', '孝感北', '孝感东', '西湖东', '新化南', '新晃西', '新津', '小金口', '辛集南', '新津南', '咸宁东', '咸宁南', '溆浦南', '西平西', '湘潭北', '邢台东', '西乌旗', '修武西', '修文县', '萧县北', '新乡东', '新余北', '西阳村', '信阳东', '咸阳秦都', '仙游', '新郑机场', '香樟路', '迎宾路', '永城北', '运城北', '永川东', '禹城东', '宜春', '岳池', '云东海', '姚渡', '云浮东', '永福南', '雨格', '洋河', '永济北', '弋江', '于家堡', '延吉西', '永康南', '运粮河', '炎陵', '杨陵南', '伊敏', '郁南', '银瓶', '永寿', '阳朔', '云山', '玉山南', '永泰', '银滩', '鹰潭北', '烟台南', '伊通', '烟台西', '尤溪', '云霄', '宜兴', '玉溪', '阳信', '应县', '攸县南', '洋县西', '余姚北', '榆中', '诏安', '正定机场', '纸坊东', '准格尔', '庄河北', '昭化', '织金北', '张家川', '芷江', '织金', '仲恺', '曾口', '左岭', '樟木头东', '驻马店西', '漳浦', '肇庆东', '庄桥', '昭山', '钟山西', '漳县', '资阳北', '遵义', '遵义南', '张掖西', '资中北', '涿州东', '枣庄东', '卓资东', '郑州东', '株洲南']
telecodes = ['VAP', 'BOP', 'BJP', 'VNP', 'BXP', 'IZQ', 'CUW', 'CQW', 'CRW', 'CXW', 'GGQ', 'SHH', 'SNH', 'AOH', 'SXH', 'TBP', 'TJP', 'TIP', 'TXP', 'CCT', 'CET', 'CRT', 'ICW', 'CNW', 'CDW', 'CSQ', 'CWQ', 'FZS', 'FYS', 'GIW', 'GZQ', 'GXQ', 'HBB', 'VBB', 'VAB', 'HFH', 'HTH', 'NDC', 'HHC', 'KEQ', 'HMQ', 'VUQ', 'HGH', 'HZH', 'XHH', 'JNK', 'JAK', 'JGK', 'KMM', 'KXM', 'LSO', 'LVJ', 'LZJ', 'LAJ', 'NCG', 'NJH', 'NKH', 'NNZ', 'VVP', 'SJP', 'SYT', 'SBT', 'SDT', 'SOT', 'TBV', 'TDV', 'TYV', 'WHN', 'KNM', 'WMR', 'EAY', 'XAY', 'CAY', 'XNO', 'YIJ', 'ZZF', 'ART', 'AKY', 'ASR', 'AHX', 'AKR', 'APT', 'AQH', 'ASW', 'AST', 'AYF', 'BAB', 'BBH', 'BCT', 'BHZ', 'BEL', 'BAP', 'BJY', 'BJB', 'BKX', 'BIZ', 'HJL', 'BTT', 'BDC', 'BTC', 'BXR', 'BXT', 'BEC', 'BXJ', 'BZH', 'CBN', 'VGQ', 'CDP', 'CDT', 'CFD', 'CDG', 'CEH', 'CPP', 'CRG', 'CTT', 'CDB', 'CXK', 'COM', 'CXT', 'CBF', 'IYH', 'CZJ', 'CZH', 'CZQ', 'CZF', 'COP', 'CZZ', 'RNT', 'DCT', 'DUT', 'DFB', 'DMQ', 'DHD', 'DHJ', 'DHL', 'DHT', 'DJB', 'DFP', 'DDW', 'DFT', 'DKM', 'DLT', 'DNG', 'DZX', 'DOC', 'DQT', 'DTV', 'DPK', 'DUX', 'RYW', 'DOF', 'RXW', 'DZP', 'EJC', 'RLC', 'ESN', 'FES', 'FJQ', 'FLV', 'FLW', 'FRX', 'FET', 'FSQ', 'FXD', 'FYH', 'GRO', 'GHW', 'GJV', 'GBZ', 'GRX', 'GLZ', 'GXN', 'GSN', 'GNJ', 'GYW', 'GBQ', 'GZG', 'GLT', 'GBT', 'AUH', 'HRH', 'HMB', 'HVN', 'HBV', 'KCN', 'HCY', 'HDP', 'HDB', 'HGB', 'HTT', 'HEM', 'HJB', 'HHQ', 'HKN', 'HLD', 'HRX', 'HWD', 'HLB', 'HMV', 'HMR', 'HAH', 'HNB', 'EUH', 'HQM', 'HBP', 'HRP', 'OSN', 'HSY', 'HKH', 'HSN', 'HSP', 'HYQ', 'HIK', 'HXZ', 'HOY', 'HCQ', 'VAG', 'JAL', 'JBG', 'JCF', 'JJZ', 'JCG', 'JFF', 'JGX', 'JGG', 'JHL', 'RNH', 'JBH', 'JJG', 'JLL', 'JMN', 'JMB', 'JIK', 'JAC', 'JQJ', 'JUH', 'JIQ', 'JTL', 'JVJ', 'JXB', 'JRH', 'JGJ', 'JFW', 'JZD', 'JZT', 'JKP', 'KLR', 'KFF', 'KLV', 'KLW', 'KSR', 'KNH', 'KTR', 'KYT', 'UAH', 'LBF', 'UCH', 'LCW', 'LKZ', 'LCN', 'LCG', 'UTP', 'LDL', 'LDQ', 'LFV', 'LGP', 'LHC', 'LON', 'LWJ', 'UHP', 'LHM', 'LQL', 'LJL', 'LHV', 'LLG', 'LKV', 'UPP', 'UMW', 'LVV', 'LST', 'LWH', 'LXJ', 'LEQ', 'UEP', 'LYS', 'LYQ', 'LYF', 'UKH', 'LDF', 'LVK', 'LLF', 'DHR', 'LYD', 'LYL', 'LZX', 'LZZ', 'LZD', 'MCN', 'MDX', 'MDB', 'MRX', 'MGH', 'MHX', 'MVX', 'MDQ', 'MMZ', 'MSB', 'MJT', 'VAW', 'MYW', 'MOQ', 'MLX', 'NVH', 'NGH', 'NCB', 'NCW', 'NDZ', 'NMP', 'NFT', 'NHX', 'NGX', 'NJW', 'NPS', 'NUH', 'NFF', 'NZX', 'PEN', 'PVD', 'PIJ', 'POJ', 'PQP', 'PSQ', 'PXG', 'PXZ', 'PCW', 'PRW', 'QRN', 'QSW', 'QDK', 'QYP', 'QJM', 'QNW', 'QEB', 'QHX', 'QTB', 'QVV', 'QRS', 'QYS', 'QEH', 'RAZ', 'RQJ', 'RJG', 'RZK', 'SCB', 'SFB', 'SGQ', 'SHD', 'SHB', 'SFX', 'SXT', 'SLL', 'SMS', 'OMY', 'SMF', 'ONY', 'NIW', 'SPT', 'SQF', 'SRG', 'SSQ', 'OAH', 'OTQ', 'SWS', 'OEP', 'SEQ', 'JUQ', 'SYQ', 'SNN', 'SSB', 'VYT', 'SZH', 'SZQ', 'OXH', 'SZN', 'SUV', 'OSQ', 'TBQ', 'TVX', 'TGY', 'TGP', 'TXX', 'THL', 'TLX', 'TFR', 'TLD', 'TLT', 'TPT', 'TML', 'RDQ', 'FUP', 'TFT', 'TAK', 'TSP', 'TSJ', 'TYT', 'TQT', 'UTH', 'TZW', 'TAP', 'WCB', 'WCN', 'WDT', 'WKK', 'WHH', 'WXC', 'WJT', 'WLW', 'WWT', 'WNY', 'WSM', 'WIT', 'WUJ', 'WWJ', 'WXH', 'WXR', 'WPB', 'WAS', 'WYY', 'WYW', 'WZZ', 'RZH', 'VRH', 'ECW', 'XCF', 'ENW', 'XFB', 'XGV', 'EUG', 'XHY', 'EFQ', 'XLQ', 'XTC', 'EXP', 'XKS', 'XMS', 'XBS', 'XST', 'ETW', 'XTG', 'XWM', 'XXF', 'XUN', 'XYY', 'XFN', 'XYT', 'VIH', 'XRZ', 'XUG', 'XCH', 'YWY', 'YBW', 'YWB', 'YBD', 'HAN', 'YCW', 'AFH', 'YCN', 'YNV', 'YCB', 'YCV', 'YBP', 'YCG', 'YET', 'YGW', 'YIV', 'YJL', 'YKT', 'YKX', 'YNY', 'YLZ', 'ALY', 'TWQ', 'YPB', 'YMR', 'YAY', 'YZW', 'YPV', 'YNP', 'YYV', 'YQB', 'AQP', 'NUW', 'YNG', 'AOP', 'YRT', 'YTG', 'YAK', 'YEX', 'ATP', 'YWH', 'YON', 'YXD', 'AEQ', 'YYQ', 'YUQ', 'AOQ', 'YLH', 'ZBK', 'ZDV', 'ZGW', 'ZHQ', 'ZIQ', 'ZJZ', 'ZJH', 'DIQ', 'ZKP', 'ZMP', 'ZKN', 'ZLC', 'ZTX', 'ZDN', 'ZVQ', 'ZIT', 'ZDW', 'ZWJ', 'ZYW', 'ZIW', 'ZEK', 'ZZW', 'ZZQ', 'ZFK', 'AAX', 'ACB', 'ADX', 'ARW', 'ADP', 'ADO', 'AGT', 'YED', 'AHP', 'PKQ', 'AJJ', 'ARH', 'AJB', 'AJD', 'PYW', 'AER', 'AYY', 'ALD', 'AUZ', 'ASX', 'ALN', 'JTX', 'AZM', 'APH', 'AXT', 'ATV', 'ASH', 'ATR', 'ATL', 'AXS', 'BWQ', 'BPW', 'BGV', 'BMH', 'BCR', 'BUP', 'BEP', 'BDP', 'BPP', 'ILP', 'BNN', 'BGM', 'BUT', 'BIY', 'BVC', 'BWH', 'BEY', 'BJJ', 'BJM', 'IBQ', 'BLQ', 'BBM', 'BSB', 'BTD', 'BKD', 'BKB', 'BAT', 'BRZ', 'BOR', 'BQC', 'BLX', 'BNB', 'BOZ', 'BLB', 'BLR', 'BND', 'AAP', 'BMD', 'BNM', 'BMB', 'BRP', 'RPD', 'BQP', 'BQB', 'BQL', 'BAY', 'BSY', 'BPM', 'BAL', 'BUM', 'FDC', 'BTQ', 'BZP', 'BYP', 'BHT', 'BXK', 'VXD', 'BYC', 'BYB', 'BIV', 'BAC', 'BID', 'BYT', 'BNJ', 'BCD', 'IEW', 'RMP', 'BVP', 'CIN', 'CBC', 'CEJ', 'CCM', 'CCP', 'CID', 'CAX', 'CGT', 'CEF', 'CGV', 'CGY', 'CAJ', 'CZB', 'WBW', 'CHB', 'CHZ', 'CKT', 'CHP', 'CIH', 'CJT', 'CJX', 'CAM', 'CJY', 'CLK', 'CYP', 'CUQ', 'CLP', 'CLT', 'CMB', 'CNJ', 'VBP', 'DAQ', 'CPM', 'CQB', 'CON', 'CSB', 'EFW', 'CSP', 'CST', 'CSL', 'CSC', 'CVT', 'CES', 'CTY', 'CPT', 'CQQ', 'CIP', 'CNZ', 'CXQ', 'CRP', 'CFH', 'CYK', 'CAL', 'CEK', 'CEX', 'CYL', 'CDD', 'CYD', 'CYF', 'CZL', 'CUH', 'ESH', 'CXH', 'CKQ', 'CVK', 'CFP', 'CWM', 'ICQ', 'CBP', 'DAG', 'RAT', 'DBJ', 'DBC', 'DBD', 'RBT', 'DYJ', 'DBB', 'RDT', 'DGJ', 'DVW', 'DDB', 'DKJ', 'DRD', 'DRX', 'TKX', 'UFQ', 'DGY', 'DIL', 'DMM', 'DTT', 'RGW', 'DGP', 'DHB', 'DHP', 'DQD', 'SOQ', 'DQH', 'DXT', 'DJT', 'DKB', 'DJL', 'DKP', 'RVD', 'DHO', 'DLC', 'DLB', 'DLD', 'DIC', 'DTX', 'DLV', 'DNC', 'GZT', 'DMD', 'DEP', 'DNF', 'DNZ', 'DPD', 'RPP', 'DPI', 'DVT', 'LFX', 'DQX', 'DML', 'DQB', 'MOH', 'RHX', 'DRQ', 'DKH', 'RWW', 'DWT', 'DPM', 'DSL', 'DYC', 'RZT', 'DBH', 'DQK', 'DGT', 'DBM', 'DTL', 'RUH', 'DNT', 'DRJ', 'DFJ', 'DWJ', 'DZZ', 'DFM', 'DXL', 'DXX', 'DSJ', 'DXM', 'DXG', 'DKV', 'DXV', 'RXP', 'DXD', 'DYH', 'DYW', 'DYX', 'DYN', 'EXH', 'IAW', 'DBV', 'DYV', 'EWH', 'RYV', 'DYZ', 'DJP', 'DZD', 'DTJ', 'DIP', 'DCH', 'DVQ', 'DNV', 'DFZ', 'DZV', 'DWV', 'ROP', 'DXP', 'DZY', 'DAP', 'RZP', 'EBW', 'RDP', 'RDX', 'EEC', 'RLD', 'ELA', 'EMW', 'RML', 'RYJ', 'ECN', 'FAS', 'FCG', 'FNG', 'FIH', 'FEM', 'FHX', 'FHR', 'FHT', 'FEV', 'FHH', 'FIB', 'FTT', 'FLJ', 'FTB', 'FZB', 'FNH', 'AKH', 'FNP', 'FQS', 'VMW', 'FSJ', 'FUQ', 'FSV', 'FST', 'FKP', 'FSZ', 'FTX', 'FYP', 'FDY', 'FXY', 'FEY', 'FXK', 'FUH', 'FAV', 'FBT', 'FYG', 'FYM', 'FYT', 'FYX', 'FBG', 'FZY', 'FZC', 'VZK', 'GFP', 'VJW', 'GBP', 'GBD', 'GDJ', 'GCN', 'GEP', 'GCV', 'GZB', 'GRH', 'GTW', 'IDW', 'GDV', 'GGZ', 'GVP', 'GGT', 'GGL', 'GGJ', 'GGP', 'GAX', 'GEX', 'GDT', 'GKT', 'GLJ', 'GEJ', 'GFM', 'GHT', 'GLF', 'VOW', 'GLP', 'GMK', 'GMC', 'GRT', 'GNT', 'GNM', 'GPF', 'GEY', 'GAG', 'GQD', 'GQY', 'GZD', 'GST', 'GSW', 'GSP', 'GSL', 'GSD', 'GXD', 'GTJ', 'GAY', 'GTS', 'GTP', 'KEP', 'GXG', 'GYH', 'GXF', 'GIP', 'GYF', 'GAW', 'GUJ', 'GYL', 'GYD', 'GZS', 'GNQ', 'GEH', 'GZY', 'GZJ', 'GSQ', 'GXT', 'GOT', 'GSS', 'GAT', 'AMH', 'HWN', 'HIH', 'VXN', 'HBL', 'HEB', 'HAF', 'XEG', 'VCQ', 'HCZ', 'HCN', 'HCT', 'WKW', 'HCJ', 'HCP', 'HXT', 'HGC', 'HDV', 'HFR', 'HFG', 'HXJ', 'HGP', 'HYM', 'IGW', 'HHT', 'VHD', 'HUD', 'HJJ', 'HJR', 'HFM', 'HIM', 'HJF', 'HJV', 'HJS', 'HJT', 'HDC', 'HXP', 'HJM', 'HKJ', 'HKG', 'KOH', 'HUB', 'HPD', 'HHB', 'HIT', 'HOB', 'HIB', 'ULY', 'HRB', 'VLB', 'HAT', 'HLL', 'HIL', 'HAX', 'VTJ', 'HLT', 'VEH', 'HYP', 'HHL', 'HNH', 'HMJ', 'VAQ', 'HZM', 'VQH', 'HEY', 'HRV', 'HRN', 'HDY', 'HDL', 'VSR', 'VSB', 'VSQ', 'HSQ', 'HOT', 'VCH', 'HHP', 'HSJ', 'HUT', 'HSO', 'HEQ', 'VSJ', 'HQB', 'VTK', 'VTR', 'VTQ', 'HZT', 'HWK', 'RWH', 'VXB', 'HYY', 'VHB', 'VTB', 'HTJ', 'VIX', 'HAY', 'HYK', 'HVQ', 'HUW', 'HQY', 'HGJ', 'WHW', 'VIQ', 'HUN', 'HNO', 'HYJ', 'VZH', 'HZZ', 'VON', 'HZV', 'VXQ', 'JRT', 'JIY', 'JBD', 'JEF', 'JCJ', 'JCK', 'JNV', 'JFD', 'JDB', 'JFP', 'JOB', 'UDH', 'JST', 'VGP', 'JHP', 'JHX', 'JHB', 'JHR', 'JIR', 'JHZ', 'AJH', 'VJD', 'JJS', 'JEY', 'JJB', 'JJW', 'JKT', 'JLJ', 'JMM', 'JWQ', 'JES', 'JOK', 'JNP', 'JVS', 'JPC', 'JQX', 'SSX', 'EGH', 'JSH', 'JCN', 'JRN', 'JVV', 'JSL', 'JET', 'JOP', 'JIB', 'EAH', 'JTB', 'JOM', 'JTJ', 'JNL', 'JWX', 'JUG', 'JKK', 'JUK', 'JXV', 'JXH', 'JJP', 'EPH', 'JXT', 'UEH', 'JRQ', 'JYS', 'JYW', 'JYK', 'JYZ', 'JYH', 'JYJ', 'SZL', 'JYF', 'JXJ', 'JZK', 'WEF', 'JZH', 'JEQ', 'JBN', 'JXK', 'JXP', 'JOD', 'JOF', 'JVP', 'JYD', 'KAT', 'KCR', 'KCP', 'KDX', 'KDT', 'KOB', 'KDC', 'KAW', 'KJB', 'KQX', 'KLC', 'KHR', 'KQL', 'KSH', 'KAB', 'KSB', 'KTT', 'KXZ', 'KAM', 'KHX', 'KXT', 'KZP', 'UBZ', 'LLT', 'LPF', 'LUQ', 'LCQ', 'UCP', 'UCK', 'LCK', 'LDY', 'LRC', 'LDO', 'LDP', 'LVP', 'LVM', 'LJP', 'LOP', 'LFP', 'UFD', 'LNB', 'LGM', 'LOM', 'LGJ', 'LGB', 'UFH', 'LXX', 'LHX', 'JID', 'LNL', 'KLH', 'LHP', 'UNP', 'LEX', 'LRT', 'UDT', 'LVT', 'LKS', 'UJH', 'LJB', 'LJW', 'LJZ', 'UJT', 'LJX', 'UJL', 'LHB', 'ULK', 'LIJ', 'LKF', 'LKB', 'LKQ', 'LAX', 'LAB', 'LRM', 'LLW', 'LWQ', 'LLB', 'UWZ', 'UAP', 'LMX', 'LMB', 'LMJ', 'UNG', 'UQW', 'LPM', 'LPP', 'UPJ', 'LPG', 'UQK', 'UQJ', 'UTW', 'LUM', 'UDQ', 'LGT', 'USP', 'USH', 'LIQ', 'LRN', 'LAF', 'LMK', 'LSV', 'LUL', 'LSG', 'LBT', 'LSD', 'LAS', 'LSB', 'LET', 'LTZ', 'LAR', 'LTP', 'LBM', 'LVZ', 'LTJ', 'VLJ', 'LWK', 'LRJ', 'LNJ', 'UXK', 'LXB', 'LXY', 'LXQ', 'LUG', 'LXK', 'LXC', 'UXP', 'LYY', 'LYK', 'LYT', 'UYK', 'LDD', 'UIH', 'LNF', 'LXL', 'LMH', 'LVS', 'LYX', 'LAQ', 'LYP', 'LPQ', 'LEJ', 'LZT', 'UAQ', 'LIW', 'LIZ', 'LZS', 'LZA', 'LEM', 'LQJ', 'MAH', 'MBY', 'MGY', 'MBN', 'MCF', 'MCL', 'MAP', 'MNF', 'KPM', 'MUQ', 'MOB', 'MDF', 'MRB', 'MGN', 'MHL', 'MHZ', 'MGB', 'MHQ', 'MQQ', 'MHB', 'MLZ', 'MLL', 'MLD', 'MLB', 'MID', 'MGM', 'MUD', 'MLQ', 'MNR', 'UGW', 'MPQ', 'MQB', 'MQS', 'MQF', 'MUT', 'MAB', 'MSW', 'MKW', 'MOM', 'MST', 'MEB', 'MVY', 'MVQ', 'MUP', 'MMW', 'MYS', 'MUR', 'MZJ', 'MEY', 'MFQ', 'NAB', 'NAT', 'NBK', 'NCK', 'NSP', 'NCZ', 'NES', 'NGP', 'NFP', 'NLT', 'NNH', 'NHH', 'NHS', 'NHJ', 'NHD', 'NVT', 'NJS', 'NJB', 'NJD', 'NKP', 'NKT', 'NNQ', 'NLD', 'NIR', 'ULZ', 'NLF', 'NMD', 'NMZ', 'NMX', 'NNS', 'NPZ', 'NQD', 'NQO', 'NQJ', 'NTT', 'NOQ', 'NWV', 'NWP', 'NEH', 'NXQ', 'NXF', 'NXT', 'NUP', 'NIP', 'NAF', 'NZT', 'PAW', 'PAL', 'PNO', 'PAJ', 'PZT', 'PEY', 'PCY', 'PDB', 'PRP', 'BFF', 'PXJ', 'PRT', 'PFB', 'PGL', 'PGM', 'PAM', 'PGZ', 'PHP', 'PHM', 'PHQ', 'PBD', 'PDP', 'PKT', 'PLT', 'PNT', 'PSB', 'PSW', 'PSR', 'PSL', 'PSV', 'PHW', 'PVT', 'PTM', 'PTS', 'PTW', 'PWT', 'PWV', 'PGV', 'POW', 'PWW', 'PYX', 'PYJ', 'PYV', 'PIK', 'PPJ', 'PYK', 'PYP', 'PZG', 'PJH', 'PZD', 'POD', 'PND', 'QOT', 'QAB', 'QQP', 'QRQ', 'QDM', 'QAK', 'QFT', 'QVP', 'QFK', 'QYQ', 'QTP', 'QUY', 'QIP', 'QHD', 'QHP', 'INH', 'QJZ', 'QJN', 'QJB', 'QJW', 'QBT', 'QNY', 'QZV', 'QLD', 'QLY', 'QLZ', 'QIB', 'QGH', 'QIH', 'QMP', 'QSB', 'QSN', 'QXQ', 'QUJ', 'QYH', 'QVH', 'QAT', 'QTJ', 'QWD', 'QWP', 'QRW', 'QXV', 'QXP', 'QXJ', 'QUV', 'QXC', 'QOY', 'QYF', 'QYL', 'QVQ', 'QYJ', 'QSJ', 'QBQ', 'QYT', 'QDZ', 'QRZ', 'QZK', 'RAH', 'RCW', 'RCG', 'RBH', 'RUQ', 'RQP', 'ROK', 'RSZ', 'RSD', 'RXZ', 'RVP', 'RYF', 'RHD', 'ROF', 'OBJ', 'SBP', 'AQW', 'OBP', 'ZWT', 'SBB', 'OCH', 'SWN', 'SCR', 'SCS', 'SMV', 'SCP', 'SCT', 'SCL', 'SDJ', 'ORQ', 'ODY', 'SIL', 'SXC', 'SEP', 'OUD', 'OJQ', 'OLH', 'OFB', 'STB', 'OTW', 'OKJ', 'OGC', 'SNQ', 'SVK', 'JBS', 'SED', 'SHY', 'SBM', 'SHP', 'SKT', 'SHC', 'VOP', 'SSD', 'SHL', 'OXP', 'OHD', 'OZW', 'SEL', 'SZR', 'SVP', 'ODP', 'SQH', 'OJJ', 'SJL', 'SJB', 'SUB', 'OJB', 'SML', 'SAH', 'SKD', 'OLK', 'IMH', 'SRP', 'SJJ', 'SOZ', 'SMM', 'SJD', 'OZL', 'SHM', 'SWT', 'OMP', 'SUR', 'SHJ', 'VLD', 'SPB', 'SLM', 'ZJD', 'SIB', 'SOL', 'LNM', 'SLQ', 'SLC', 'SNT', 'OLY', 'SLP', 'VFQ', 'SCF', 'OQH', 'OMQ', 'SXF', 'SYP', 'SOB', 'SBZ', 'CYW', 'PPT', 'SON', 'SFJ', 'SQM', 'SPF', 'SID', 'SXY', 'SQT', 'SRB', 'SRL', 'SQB', 'SWB', 'SSR', 'SJQ', 'OSK', 'SAD', 'SFT', 'SAT', 'SRD', 'SST', 'SSL', 'MZQ', 'SHX', 'SDH', 'OTB', 'SEV', 'SFM', 'SWP', 'SKB', 'SXR', 'OVH', 'SXZ', 'SAS', 'SOH', 'SXL', 'SXM', 'SXJ', 'FMH', 'SYB', 'SYV', 'OYP', 'SYJ', 'SPJ', 'OEJ', 'SOP', 'OYD', 'SYL', 'BDH', 'SAY', 'SUD', 'OYJ', 'SAJ', 'SND', 'OHH', 'SRH', 'BJQ', 'OZP', 'OZY', 'SZD', 'SZB', 'SNM', 'SIN', 'SEM', 'KAH', 'ITH', 'TMK', 'TID', 'TAJ', 'TBF', 'TBB', 'TTH', 'TCX', 'TZK', 'TCL', 'TCK', 'TRQ', 'TDZ', 'TGL', 'TGC', 'TOL', 'TGV', 'THX', 'THM', 'THF', 'THG', 'TKH', 'TIX', 'TNJ', 'TOT', 'PDQ', 'TZP', 'TMD', 'TEX', 'TJH', 'TFZ', 'TIZ', 'TLB', 'PXT', 'QSL', 'TMN', 'TNN', 'TLS', 'TRC', 'TCJ', 'TVT', 'TVW', 'TIT', 'TEB', 'TQX', 'TTK', 'TQL', 'TQJ', 'TCT', 'TAB', 'TIM', 'TUT', 'THB', 'TXJ', 'TSW', 'TCH', 'TRZ', 'TND', 'TYF', 'TIL', 'TYJ', 'TYB', 'TYP', 'TEK', 'TZH', 'TZJ', 'TXK', 'TZV', 'TEW', 'QWH', 'WBP', 'WAP', 'WVP', 'WUY', 'WEW', 'WCT', 'WEQ', 'WDB', 'WRB', 'WBK', 'WDL', 'WHP', 'WNZ', 'WVT', 'WRN', 'WDP', 'WHX', 'WFK', 'WFB', 'WUT', 'WXT', 'WGB', 'WGY', 'WGL', 'WGM', 'WVC', 'WHB', 'WHF', 'WCJ', 'WUB', 'WAM', 'WJP', 'WJL', 'WJJ', 'WQB', 'WKT', 'WBT', 'WLC', 'WEB', 'WVX', 'VHH', 'WLK', 'WQC', 'WSC', 'WLX', 'WBY', 'WRX', 'WNQ', 'WWG', 'WVY', 'WNJ', 'WPT', 'WUP', 'WQL', 'WWP', 'WSJ', 'WEV', 'WSP', 'WTP', 'WSV', 'WZJ', 'WVR', 'WGH', 'WVB', 'WXV', 'WVV', 'IFH', 'WXN', 'WYZ', 'WYB', 'RYH', 'WWB', 'WIM', 'WYC', 'WZL', 'WZY', 'WZV', 'WZB', 'WQP', 'WKD', 'EAM', 'XAZ', 'XAF', 'XAP', 'EBP', 'XLP', 'ECH', 'XCD', 'XEM', 'XRX', 'XCB', 'XCT', 'EDW', 'EJM', 'XMP', 'XEZ', 'XOD', 'EFG', 'XFV', 'XFW', 'EGG', 'XGN', 'XUJ', 'XIJ', 'XGJ', 'NBB', 'XXB', 'XIR', 'XWJ', 'EEP', 'XAX', 'XHB', 'EHQ', 'XHP', 'XEC', 'XYD', 'XYP', 'EKY', 'XJB', 'EJG', 'XJV', 'ENP', 'XJM', 'EKM', 'XJT', 'XTJ', 'XMT', 'EKB', 'EAQ', 'XNB', 'XDD', 'ELP', 'XPX', 'XLB', 'XLJ', 'XYB', 'GCT', 'XPH', 'XLD', 'XZB', 'XGT', 'XMD', 'XMB', 'XAT', 'XNV', 'XRN', 'ENQ', 'XNN', 'XAW', 'XPN', 'XPY', 'XPM', 'XOS', 'EPQ', 'XIW', 'XQB', 'XQD', 'XQJ', 'XRL', 'ESP', 'XSB', 'XZN', 'XSV', 'XSP', 'XIZ', 'XAM', 'XOB', 'XDT', 'XSJ', 'XTQ', 'XTP', 'XAN', 'EIP', 'XJQ', 'EPD', 'XWF', 'XSN', 'ENN', 'XQY', 'XXQ', 'XIF', 'XOV', 'XXM', 'XGQ', 'XZC', 'XXP', 'XDB', 'XUY', 'XBY', 'XWN', 'SNZ', 'XHM', 'EEQ', 'XFM', 'XYX', 'EIF', 'EJH', 'EXM', 'EYB', 'XZJ', 'UUH', 'XZX', 'XRP', 'XZT', 'XXV', 'XZD', 'XRD', 'ERP', 'YAC', 'YAX', 'YAS', 'YNB', 'YBB', 'YUD', 'YAB', 'YKM', 'AIH', 'YYB', 'YER', 'YKJ', 'YYY', 'YQQ', 'YIN', 'YHN', 'YCK', 'YEK', 'YNF', 'YAL', 'YPK', 'YAP', 'ACP', 'IXH', 'YCT', 'YDQ', 'YDJ', 'YDM', 'YGS', 'YGH', 'YDG', 'YAJ', 'IIQ', 'YYM', 'YRB', 'YOV', 'YIK', 'YOB', 'EVH', 'YHP', 'AEP', 'YHM', 'URH', 'YAM', 'AEW', 'YHG', 'AJP', 'YAT', 'YGJ', 'YJT', 'YIR', 'AFP', 'AZK', 'RFH', 'YGT', 'YJX', 'YLW', 'YSM', 'YDY', 'YLX', 'YLB', 'YSY', 'ALW', 'YLM', 'YLD', 'YQP', 'YUM', 'YMF', 'YVV', 'YXJ', 'YMN', 'YMM', 'YST', 'YNK', 'YVM', 'YNR', 'YZJ', 'ABM', 'YPP', 'UPH', 'YSR', 'AQK', 'YQT', 'YQV', 'YGP', 'YBF', 'YSJ', 'AUM', 'YSF', 'YUK', 'YSV', 'YVH', 'ASP', 'YSP', 'YAD', 'AIP', 'YSX', 'YUT', 'YIP', 'YTQ', 'YTZ', 'YSL', 'YUX', 'YWM', 'YHW', 'YOG', 'ACG', 'YXM', 'YIG', 'YYH', 'AFW', 'YIQ', 'ARP', 'YYL', 'YYJ', 'YZY', 'UZH', 'YSZ', 'YZK', 'YQM', 'AEM', 'YZD', 'ZEY', 'ZAD', 'ZBP', 'ZUP', 'ZJJ', 'ZCN', 'ZHY', 'ZQK', 'ZIK', 'ZCV', 'ZHT', 'ZDP', 'ZDB', 'ZFM', 'ZGD', 'ZGB', 'ZHX', 'VNH', 'ZIN', 'ZJY', 'ZUB', 'ZYP', 'ZOB', 'ZDH', 'ZEH', 'ZOD', 'CWJ', 'ZWQ', 'ZUJ', 'ZBW', 'ZLV', 'ZLT', 'ZIV', 'ZLD', 'ZXX', 'ZOQ', 'ZGF', 'ZDJ', 'VNJ', 'ZNJ', 'ZPF', 'ZPS', 'ZPR', 'ZVP', 'ZQY', 'ZTK', 'ZRC', 'ZLM', 'ZGQ', 'ZOG', 'ZHD', 'ZSQ', 'ZSY', 'ZSZ', 'ZSG', 'ZOP', 'ZWB', 'ZWD', 'ZOY', 'ZTN', 'ZXS', 'ZVT', 'ZIP', 'ZXC', 'ZVY', 'ZYN', 'ZAW', 'ZYJ', 'ZUW', 'GOS', 'ZUS', 'ZUX', 'ZZY', 'ZZM', 'ZXP', 'ZAL', 'ZZC', 'ZAQ', 'XPF', 'AQC', 'ARX', 'AUR', 'ARG', 'ASE', 'AXL', 'ADF', 'BBZ', 'BBE', 'FWH', 'BMP', 'FGQ', 'FEP', 'FHP', 'FCP', 'BBY', 'BRT', 'BFQ', 'BUB', 'FZW', 'BSN', 'BGY', 'NGQ', 'BVT', 'BXY', 'UKZ', 'FWP', 'FHW', 'FNC', 'BDE', 'BIK', 'FOP', 'CUY', 'CBY', 'VAT', 'GUH', 'KNW', 'CVO', 'FVH', 'CNG', 'FQQ', 'FPQ', 'CQJ', 'COW', 'CSE', 'CSU', 'CBQ', 'RXQ', 'CTE', 'CNS', 'CWY', 'CBH', 'CXE', 'CYN', 'CNQ', 'CWT', 'DCZ', 'RBZ', 'DCG', 'DCJ', 'IYQ', 'RDD', 'RWT', 'DRB', 'KRQ', 'DNE', 'RGT', 'RMT', 'RTQ', 'UWQ', 'NVQ', 'RRQ', 'FWQ', 'DJE', 'DIM', 'DNY', 'KOQ', 'DSD', 'DRH', 'RSC', 'PRH', 'DAL', 'OWH', 'DTO', 'WWQ', 'DNJ', 'DDG', 'DWG', 'IRQ', 'DBN', 'KJW', 'DOK', 'DYG', 'DOP', 'WZQ', 'FQW', 'IXW', 'EGY', 'EFN', 'FBZ', 'FDT', 'FDZ', 'PUH', 'FUW', 'FEW', 'FLN', 'FNM', 'FUY', 'FQE', 'KCQ', 'FAW', 'FSL', 'FOQ', 'FZQ', 'NZQ', 'FBM', 'FYB', 'FDG', 'FZG', 'GCG', 'VUW', 'GAE', 'GMP', 'GCZ', 'GUP', 'FMW', 'GNN', 'KIW', 'GVW', 'HGD', 'GEM', 'GLE', 'GEZ', 'IMQ', 'FBQ', 'GQT', 'GXM', 'GAZ', 'GPT', 'GDE', 'GUN', 'FFQ', 'FKQ', 'GBS', 'GPM', 'GAJ', 'STS', 'KQW', 'KEW', 'GNP', 'HNS', 'PLH', 'HFF', 'HKB', 'SER', 'HUL', 'HPP', 'KDQ', 'HDJ', 'HDO', 'HTV', 'HTB', 'COH', 'ENH', 'KGN', 'KAN', 'HNN', 'KXN', 'HPB', 'KAQ', 'HCF', 'KHN', 'KHQ', 'IHN', 'FAQ', 'HBM', 'KLQ', 'VLY', 'KMQ', 'IUQ', 'HPV', 'HNG', 'HOH', 'HVZ', 'FBH', 'HFV', 'HPN', 'KRN', 'KSN', 'NYH', 'IHP', 'HLN', 'VUR', 'KNN', 'KXQ', 'HKP', 'HTY', 'HEK', 'IYN', 'KXY', 'HYT', 'HWV', 'KNQ', 'JUL', 'JAJ', 'JDG', 'NSH', 'PFQ', 'JHD', 'JOL', 'JMP', 'JLS', 'JLF', 'KJQ', 'JVK', 'JME', 'JCS', 'JJH', 'OKH', 'JUS', 'JNJ', 'JWH', 'JSM', 'JPQ', 'JUN', 'NRH', 'JDV', 'LOH', 'JMZ', 'JXG', 'JBE', 'JBJ', 'JOW', 'JTN', 'JYL', 'PYQ', 'PYH', 'JZV', 'JEP', 'KBF', 'FLQ', 'KHU', 'QKW', 'KLD', 'KOM', 'KTQ', 'KVW', 'IDZ', 'UCZ', 'GMH', 'LTQ', 'LCF', 'NWW', 'ILQ', 'UUP', 'VCZ', 'LGK', 'ACQ', 'FVW', 'LVO', 'UOQ', 'UQQ', 'INW', 'LLQ', 'KFQ', 'LQM', 'LXV', 'KGQ', 'BNQ', 'UDP', 'LNE', 'LBN', 'IKW', 'UQZ', 'LNK', 'LUF', 'UKK', 'COK', 'KFW', 'KBQ', 'UKQ', 'INJ', 'LPE', 'LGY', 'UDV', 'IVW', 'LAG', 'LDH', 'LSE', 'KRW', 'LBK', 'LEH', 'LUK', 'LNR', 'LSZ', 'LZE', 'LDJ', 'OMH', 'MHN', 'MDN', 'MNO', 'MJN', 'MLR', 'MBJ', 'MLM', 'MSR', 'MBK', 'MBS', 'MIF', 'IUW', 'MSN', 'MXJ', 'MYO', 'KIQ', 'MBM', 'MZF', 'MZM', 'NBE', 'NEF', 'NCE', 'NDG', 'NXG', 'NDJ', 'NOJ', 'NUT', 'NFG', 'NDN', 'NKW', 'FIW', 'NDQ', 'LLH', 'NMO', 'NFZ', 'NXZ', 'NBS', 'NOY', 'NCQ', 'NYE', 'NYF', 'PAN', 'PUE', 'PBM', 'PBE', 'PCE', 'PGW', 'PAK', 'PUT', 'PNN', 'POK', 'PEQ', 'PAZ', 'PPW', 'PUD', 'PSK', 'PBG', 'PYG', 'PYF', 'PDV', 'PUK', 'PZM', 'PAE', 'PMW', 'QGJ', 'QFW', 'QCE', 'QHK', 'QMQ', 'QET', 'QFB', 'QBM', 'QDE', 'QIM', 'QEW', 'QNB', 'QEJ', 'QVW', 'QAY', 'QSQ', 'QIJ', 'QSO', 'QGV', 'QBY', 'QNC', 'QWQ', 'QNZ', 'QZQ', 'RUO', 'RQW', 'RCK', 'RXG', 'RIH', 'RVW', 'RKO', 'RVQ', 'SFF', 'SDL', 'FIQ', 'KKW', 'SUP', 'NFQ', 'SOK', 'GQH', 'AHQ', 'SXP', 'SWZ', 'OJT', 'IPW', 'SYM', 'IXP', 'IQW', 'SHS', 'SVM', 'FMQ', 'HMY', 'ONC', 'SBN', 'SQE', 'SQN', 'SMR', 'NSQ', 'ARQ', 'KUQ', 'KSQ', 'RNQ', 'INQ', 'QHW', 'STE', 'OGQ', 'NPH', 'SLH', 'SSH', 'GPH', 'IPQ', 'MPH', 'OYT', 'OVQ', 'OCT', 'SNV', 'IOQ', 'SRQ', 'IFQ', 'QQJ', 'OSW', 'TAD', 'TOK', 'TBZ', 'TTN', 'TIV', 'THR', 'TAM', 'JYN', 'TJN', 'TEN', 'TXL', 'TJB', 'KXH', 'TAR', 'TNS', 'TNW', 'TIJ', 'TWJ', 'KQQ', 'THN', 'TAZ', 'TNV', 'TST', 'TBE', 'TDE', 'TOP', 'WGK', 'WFG', 'WBL', 'WHK', 'WPC', 'WMT', 'WFN', 'WAR', 'WET', 'WSE', 'WTZ', 'IIH', 'WAH', 'WOV', 'WDH', 'WBS', 'WCS', 'WYG', 'WEJ', 'WZE', 'WIF', 'WBZ', 'XDZ', 'XVF', 'ERN', 'EWW', 'XFT', 'NQQ', 'FVQ', 'XTV', 'XJN', 'GDN', 'WDQ', 'EJQ', 'EWQ', 'IRW', 'NKQ', 'IJP', 'ITW', 'XKN', 'UNN', 'EMQ', 'EGQ', 'EDQ', 'EDP', 'XWC', 'EXF', 'XWE', 'QSH', 'EGF', 'XBG', 'XQF', 'OYN', 'XOY', 'XWS', 'EZF', 'FNQ', 'YFW', 'RGH', 'ABV', 'WMW', 'YSK', 'YEG', 'AWW', 'NAQ', 'AOJ', 'IXQ', 'YBZ', 'VTM', 'GTH', 'AJV', 'RVH', 'YKP', 'YXL', 'QUH', 'YEF', 'YAG', 'YEY', 'YMX', 'YKQ', 'KPQ', 'ASY', 'YCZ', 'KZQ', 'YGG', 'YTS', 'CTQ', 'YKG', 'YLK', 'YTL', 'YTK', 'YXS', 'YBS', 'YUH', 'AXM', 'YVK', 'YZV', 'YXG', 'YXY', 'CTH', 'IZJ', 'ZDS', 'ZHP', 'ZMN', 'ZEC', 'ZUT', 'ZHW', 'ZJE', 'ZIJ', 'ZPQ', 'IZW', 'KKQ', 'ZKE', 'ZSN', 'ZRQ', 'ZLN', 'ZCS', 'FCQ', 'ZQH', 'KWQ', 'ZAZ', 'ZXJ', 'FYW', 'ZYE', 'ZNE', 'ZEJ', 'WZW', 'ZAP', 'ZNK', 'ZDC', 'ZAF', 'KVQ']
def get_name(telecode):
return names[telecodes.index(telecode)]
def get_telecode(name):
return telecodes[names.index(name)]
print(get_name("VAP"))
print(get_telecode("北京"))