├── HH_ALKIS_Landesgrenze.cpg ├── superheat.png ├── www ├── Thumbs.db ├── bike.jpeg └── bike.jpg ├── bike_usage_HH.png ├── sp_files ├── june16.shp ├── june16.shx └── june16.dbf ├── joyplot_month-time.png ├── HH_ALKIS_Landesgrenze.dbf ├── HH_ALKIS_Landesgrenze.shp ├── HH_ALKIS_Landesgrenze.shx ├── Kruse_poster-session.pdf ├── joyplot_dayofweek-time.png ├── joyplot_month-weekdays.png ├── HH_ALKIS_Landesgrenze.prj ├── style.css ├── ui.R ├── server.R ├── README.md ├── superheat_processing.R └── stadtrad_processing.R /HH_ALKIS_Landesgrenze.cpg: -------------------------------------------------------------------------------- 1 | UTF-8 -------------------------------------------------------------------------------- /superheat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataXujing/bike_sharing/master/superheat.png -------------------------------------------------------------------------------- /www/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataXujing/bike_sharing/master/www/Thumbs.db -------------------------------------------------------------------------------- /www/bike.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataXujing/bike_sharing/master/www/bike.jpeg -------------------------------------------------------------------------------- /www/bike.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataXujing/bike_sharing/master/www/bike.jpg -------------------------------------------------------------------------------- /bike_usage_HH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataXujing/bike_sharing/master/bike_usage_HH.png -------------------------------------------------------------------------------- /sp_files/june16.shp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataXujing/bike_sharing/master/sp_files/june16.shp -------------------------------------------------------------------------------- /sp_files/june16.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataXujing/bike_sharing/master/sp_files/june16.shx -------------------------------------------------------------------------------- /joyplot_month-time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataXujing/bike_sharing/master/joyplot_month-time.png -------------------------------------------------------------------------------- /HH_ALKIS_Landesgrenze.dbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataXujing/bike_sharing/master/HH_ALKIS_Landesgrenze.dbf -------------------------------------------------------------------------------- /HH_ALKIS_Landesgrenze.shp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataXujing/bike_sharing/master/HH_ALKIS_Landesgrenze.shp -------------------------------------------------------------------------------- /HH_ALKIS_Landesgrenze.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataXujing/bike_sharing/master/HH_ALKIS_Landesgrenze.shx -------------------------------------------------------------------------------- /Kruse_poster-session.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataXujing/bike_sharing/master/Kruse_poster-session.pdf -------------------------------------------------------------------------------- /joyplot_dayofweek-time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataXujing/bike_sharing/master/joyplot_dayofweek-time.png -------------------------------------------------------------------------------- /joyplot_month-weekdays.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataXujing/bike_sharing/master/joyplot_month-weekdays.png -------------------------------------------------------------------------------- /HH_ALKIS_Landesgrenze.prj: -------------------------------------------------------------------------------- 1 | GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]] -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-image: url("bike.jpg"); 3 | background-repeat:no-repeat; 4 | background-position: center center; 5 | background-attachment: fixed; 6 | -webkit-background-size: cover; 7 | -moz-background-size: cover; 8 | background-size: cover; 9 | font-family: "Helvetica"; 10 | } -------------------------------------------------------------------------------- /ui.R: -------------------------------------------------------------------------------- 1 | # load packages 2 | require(leaflet) 3 | require(shinythemes) 4 | 5 | # ui 6 | shinyUI( 7 | bootstrapPage(theme = shinytheme("cyborg"), 8 | navbarPage(title="StadtRAD Hamburg", 9 | tabPanel("Karte", 10 | div(class="outer",includeCSS("style.css"), 11 | 12 | tags$style(type = "text/css", ".outer {position: fixed; top: 50px; left: 0; right: 0; bottom: 0; overflow: hidden; padding: 0}"), 13 | 14 | tags$head(tags$style(HTML('#controls {background-color: rgba(0,0,0,0.45);}'))), 15 | 16 | leafletOutput("stadtrad.map", width = "100%", height = "100%"), 17 | absolutePanel(id = "controls", class = "panel panel-default", fixed = TRUE, 18 | draggable = TRUE, top = 60, left = "auto", right = 20, bottom = "auto", 19 | width = 330, height = "auto", 20 | 21 | p("Diese interaktive Karte zeigt die Nutzung des Hamburger Fahrradleihsystems StadtRAD im Juni 2016. Die Karte hat folgende Funktionen:"), 22 | HTML("
Code: Diese Web-App wurde mit Shiny gebaut. Den Code für die Shiny-App findet man hier.
33 | Daten: Die Daten kommen von der Deutschen Bahn. Die Karte berücksichtigt alle Fahrten zwischen dem 01.06.16 und 30.06.16. Auf der Karte werden nur Streckenabschnitte mit mindestens fünf Fahrten abgebildet.
'), 34 | value="about") 35 | ) 36 | ) 37 | ) 38 | ) -------------------------------------------------------------------------------- /server.R: -------------------------------------------------------------------------------- 1 | # load packages 2 | require(dplyr) 3 | require(leaflet) 4 | require(rgdal) 5 | require(RColorBrewer) 6 | require(shiny) 7 | 8 | # server fuction 9 | shinyServer( 10 | function(input, output, session){ 11 | 12 | # setwd 13 | # setwd("C:/Users/akruse/Documents/Projekte_Weitere/stadtrad") 14 | 15 | # load hamburg shape for map 16 | hhshape <- readOGR(dsn = ".", layer = "HH_ALKIS_Landesgrenze") 17 | 18 | # load stations for markers on map 19 | station <- read.csv("HACKATHON_RENTAL_ZONE_CALL_A_BIKE.csv", sep = ";", encoding = "UTF-8") 20 | station <- filter(station, CITY == "Hamburg") 21 | station <- select(station, RENTAL_ZONE_GROUP, RENTAL_ZONE_X_COORDINATE, RENTAL_ZONE_Y_COORDINATE) 22 | station$RENTAL_ZONE_X_COORDINATE <- gsub(",",".",station$RENTAL_ZONE_X_COORDINATE) 23 | station$RENTAL_ZONE_Y_COORDINATE <- gsub(",",".",station$RENTAL_ZONE_Y_COORDINATE) 24 | station <- filter(station, RENTAL_ZONE_X_COORDINATE != "0.000000000000000") 25 | station <- filter(station, RENTAL_ZONE_Y_COORDINATE != "0.000000000000000") 26 | station <- filter(station, RENTAL_ZONE_Y_COORDINATE != "") 27 | station <- filter(station, RENTAL_ZONE_X_COORDINATE != "") 28 | station$RENTAL_ZONE_X_COORDINATE = as.numeric(station$RENTAL_ZONE_X_COORDINATE) 29 | station$RENTAL_ZONE_Y_COORDINATE = as.numeric(station$RENTAL_ZONE_Y_COORDINATE) 30 | 31 | # get pre-processed sp file 32 | sp_plot <- readOGR(dsn = "sp_files", layer = "june16") 33 | 34 | # color palette 35 | qpal <- colorQuantile(rev(brewer.pal(4, "YlGnBu")), NULL, n = 4) 36 | 37 | # create map 38 | output$stadtrad.map <- renderLeaflet({ 39 | withProgress(message = 'Erstelle interaktive Karte...', 40 | 41 | stadtrad.map <- leaflet(sp_plot) %>% 42 | setView(lng = 9.992924, lat = 53.55100, zoom = 12) %>% 43 | addTiles('http://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', 44 | attribution='Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap') %>% 45 | addPolygons(data = hhshape, stroke = T, smoothFactor = 0.05, fillOpacity = 0.05, color = "red", weight = 1, layerId = "notfoo") %>% 46 | addPolylines(popup = paste("Fahrten:",sp_plot@data$count),color = qpal(sp_plot@data$count),opacity = 1,weight = 1.5) %>% 47 | addCircleMarkers(lng = station$RENTAL_ZONE_X_COORDINATE, lat = station$RENTAL_ZONE_Y_COORDINATE, popup=station$RENTAL_ZONE_GROUP, fillOpacity = 100, color = "red", stroke = F, radius = 3, group="markers") %>% 48 | addLegend(position = 'bottomleft',colors = rev(brewer.pal(5, "YlGnBu")),labels = c("sehr schwach","schwach","mittel","stark","sehr stark"),title = 'Frequentierung') 49 | ) 50 | }) 51 | 52 | # observer to view/hide markers 53 | observeEvent(input$show, { 54 | proxy <- leafletProxy('stadtrad.map') 55 | if (input$show) proxy %>% showGroup('markers') 56 | else proxy %>% hideGroup('markers') 57 | }) 58 | }) 59 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Read an article on the usage of open data for bicycle traffic planning on my [Medium](https://medium.com/@alex_kruse/nutzung-von-open-data-im-rahmen-der-radverkehrsstrategie-9cf85a813c48). 2 | 3 | ## Visualization of usage of bike sharing network in Hamburg (StadtRAD) 4 | + Data: http://data.deutschebahn.com/dataset/data-call-a-bike 5 | + Use the map here: http://207.154.245.18/shiny/stadtrad/ or https://alexkruse.shinyapps.io/stadtrad/ 6 | + I created a [Poster](https://github.com/kruse-alex/bike_sharing/blob/master/Kruse_poster-session.pdf) for [useR 2017](https://user2017.brussels/posters) Poster Session and done a [workshop](https://github.com/kruse-alex/osm_brussels) for [OpenStreetMap](https://www.eventbrite.com/e/open-bike-data-mapping-with-openstreetmap-registration-34806438996). 7 | 8 | My interactive map shows the bike sharing usage of StadtRAD, the bike sharing system in Hamburg – Germany. The data is available on the open data platform from Deutsche Bahn, the public railway company in Germany. The last new StadtRAD station was put into operation in May 2016, that is why a have chosen to display the usage of June 2016. The brighter the lines, the more bikes have been cycled along that street. 9 | 10 |  11 | 12 | From data processing and spatial analysis to visualization the whole project was done in R. I have used [leaflet](https://rstudio.github.io/leaflet/) and [shiny](https://shiny.rstudio.com/) to display the data interactively. The bikes themselves don’t have GPS, so the routes are estimated on a shortest route basis using the awesome [CycleStreets API](https://www.cyclestreets.net/api/). The biggest challenge has been the aggregation of overlapping routes. I found the overline function from the [stplanr package](https://github.com/ropensci/stplanr) very helpful. It converts a series of overlaying lines and aggregates their values for overlapping segments. The raw data file from Deutsche Bahn is quite huge so I struggled to import the data into R to process it. In the end the read.csv.sql function from the [sqldf package](https://cran.r-project.org/web/packages/sqldf/sqldf.pdf) did the job. 13 | 14 | To further analyze the StadtRAD data I also took the full booking data from 2016 and did some diagrams. The first one is a calendar heatmap where you can see the amount of rented bikes aggregated on a daily basis. On the top of the graph you can see a barplot representing the rented bikes aggregated by the day of week. On the right you see a barplot to display the StadtRAD usage for each calendar week of 2016. The idea to use calendar heatmaps to display bike sharing usage comes from [Via Velox](http://infovis-mannheim.de/viavelox/). The code to create this heatmap is also in this Repo. 15 | 16 |  17 | 18 | I also created joyplots with ggplot to display and analyze the data. The first one shows the daily usage of every weekday. You can see big differences between working days and the weekend. 19 | 20 |  21 | 22 | The next diagram shows the daily usage per month. You can see that people renting bikes earlier in the summer. 23 | 24 |  25 | 26 | The last diagram shows the differences between the months on a daily basis. You can see that people were not using StadtRAD a lot during chrismas. 27 | 28 |  29 | -------------------------------------------------------------------------------- /superheat_processing.R: -------------------------------------------------------------------------------- 1 | ############################################################################################################################################# 2 | # PACKAGES 3 | ############################################################################################################################################# 4 | 5 | # load packages 6 | library(sqldf) 7 | require(dplyr) 8 | require(reshape2) 9 | require(superheat) 10 | 11 | # set locale to get weekdays in English 12 | Sys.setlocale("LC_TIME", "C") 13 | 14 | ############################################################################################################################################# 15 | # LOAD DATA 16 | ############################################################################################################################################# 17 | 18 | # setwd 19 | # your wd 20 | 21 | # load data (download data from Deutsche Bahn) 22 | mydata = read.csv.sql("OPENDATA_BOOKING_CALL_A_BIKE.csv", sql = "select * from file where CITY_RENTAL_ZONE = '\"Hamburg\"' ", sep = ";") 23 | 24 | ############################################################################################################################################# 25 | # PROCESS DATA 26 | ############################################################################################################################################# 27 | 28 | # processing 29 | mydata = select(mydata, DATE_FROM) 30 | mydata = as.data.frame(sapply(mydata, function(x) gsub("\"", "", x))) 31 | mydata$DATE_FROM = as.POSIXct(strptime(mydata$DATE_FROM, "%Y-%m-%d %H:%M:%S")) 32 | 33 | # filter on 2016 (Note: full KWs needed) 34 | mydata = filter(mydata, DATE_FROM >= "2015-12-28 00:00:00" & DATE_FROM <= "2017-01-01 23:59:59") 35 | 36 | # time formatting day of week and KW 37 | mydata$week = strftime(mydata$DATE_FROM,format="%W") 38 | mydata$week[mydata$DATE_FROM >= "2015-12-28 00:00:00" & mydata$DATE_FROM <= "2016-01-03 23:59:59"] = "00" 39 | mydata$week[mydata$DATE_FROM >= "2016-12-26 00:00:00" & mydata$DATE_FROM <= "2017-01-01 23:59:59"] = "53" 40 | mydata$weekday = weekdays(mydata$DATE_FROM) 41 | 42 | # grouing 43 | mydata = mydata %>% group_by(week, weekday) %>% summarise(count = n()) 44 | 45 | # change order of factor levels for plotting 46 | mydata$weekday = as.factor(mydata$weekday) 47 | mydata$weekday = factor(mydata$weekday, levels = c("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday")) 48 | mydata$week= as.factor(mydata$week) 49 | mydata$week = factor(mydata$week, levels = rev(levels(mydata$week))) 50 | 51 | # create matrix for heatmap 52 | mydata = acast(mydata, week~weekday, value.var="count") 53 | mydata = as.data.frame(mydata) 54 | 55 | ############################################################################################################################################# 56 | # CREATE SUPERHEAT 57 | ############################################################################################################################################# 58 | 59 | # prevent scientific notation of numbers for plotting 60 | options(scipen=999) 61 | 62 | # save plot 63 | png("superheat.png", height = 900, width = 800) 64 | 65 | # plot 66 | superheat(mydata, 67 | 68 | # main plot 69 | title = "StadtRAD Usage 2016 (Calendar Heatmap)", 70 | row.title = "Number of Week", 71 | left.label.text.size = 3, 72 | bottom.label.text.size = 4, 73 | 74 | # y axis bar 75 | yr = rowSums(mydata), 76 | yr.axis.name = "", 77 | yr.plot.type = "bar", 78 | 79 | # x axis bar 80 | yt = colSums(mydata), 81 | yt.plot.type = "bar", 82 | yt.axis.name = "", 83 | 84 | # legend 85 | legend.breaks = c(4000, 8000, 12000)) 86 | dev.off() 87 | -------------------------------------------------------------------------------- /stadtrad_processing.R: -------------------------------------------------------------------------------- 1 | ############################################################################################################################################# 2 | # PACKAGES 3 | ############################################################################################################################################# 4 | 5 | # load packages 6 | library(sqldf) 7 | require(dplyr) 8 | require(data.table) 9 | require(sp) 10 | require(rgdal) 11 | require(stplanr) 12 | require(reshape2) 13 | require(rmapshaper) 14 | 15 | # check for cs key 16 | Sys.getenv("CYCLESTREET") 17 | 18 | ############################################################################################################################################# 19 | # LOAD DATA 20 | ############################################################################################################################################# 21 | 22 | # setwd 23 | setwd("K:/Consulting/13_Alex_Data_Analyst/Datenanalyse_Projekte/Weitere/stadtrad") 24 | 25 | # load data (download data from Deutsche Bahn) 26 | mydata <- read.csv.sql("HACKATHON_BOOKING_CALL_A_BIKE.csv", sql = "select * from file where CITY_RENTAL_ZONE = '\"Hamburg\"' ", sep = ";") 27 | 28 | ############################################################################################################################################# 29 | # PROCESS DATA 30 | ############################################################################################################################################# 31 | 32 | # processing 33 | mydata <- select(mydata, DATE_FROM, TRIP_LENGTH_MINUTES, START_RENTAL_ZONE_GROUP, END_RENTAL_ZONE_GROUP) 34 | mydata <- as.data.frame(sapply(mydata, function(x) gsub("\"", "", x))) 35 | mydata$DATE_FROM <- gsub(".0000000","",mydata$DATE_FROM) 36 | mydata$DATE_FROM <- as.POSIXct(strptime(mydata$DATE_FROM, "%Y-%m-%d %H:%M:%S")) 37 | 38 | # filter on june 39 | mydata <- filter(mydata, DATE_FROM >= "2016-06-01 00:00:00" & DATE_FROM <= "2016-06-30 23:59:59") 40 | 41 | # aggregate doubles 42 | mydata <- transform(mydata, min = pmin(as.character(START_RENTAL_ZONE_GROUP), as.character(END_RENTAL_ZONE_GROUP))) 43 | mydata <- transform(mydata, max = pmax(as.character(START_RENTAL_ZONE_GROUP), as.character(END_RENTAL_ZONE_GROUP))) 44 | 45 | # get lan/lat from stations 46 | station <- read.csv("HACKATHON_RENTAL_ZONE_CALL_A_BIKE.csv", sep = ";", quote = "", stringsAsFactors = T) 47 | station <- as.data.frame(sapply(station, function(x) gsub("\"", "", x))) 48 | station <- filter(station, X.CITY. == "Hamburg") 49 | station <- select(station, X.RENTAL_ZONE_GROUP., X.RENTAL_ZONE_X_COORDINATE., X.RENTAL_ZONE_Y_COORDINATE.) 50 | colnames(station) <- c("RENTAL_ZONE_GROUP", "RENTAL_ZONE_X_COORDINATE", "RENTAL_ZONE_Y_COORDINATE") 51 | 52 | mydata <- merge(mydata, station, by.x = "min", by.y = "RENTAL_ZONE_GROUP", all.x = T) 53 | mydata <- merge(mydata, station, by.x = "max", by.y = "RENTAL_ZONE_GROUP", all.x = T) 54 | mydata <- mydata[complete.cases(mydata),] 55 | mydata <- filter(mydata, TRIP_LENGTH_MINUTES != "") 56 | 57 | # some more processing 58 | mydata$start <- paste(mydata$RENTAL_ZONE_Y_COORDINATE.x, mydata$RENTAL_ZONE_X_COORDINATE.x, sep = " ") 59 | mydata$dest <- paste(mydata$RENTAL_ZONE_Y_COORDINATE.y, mydata$RENTAL_ZONE_X_COORDINATE.y, sep = " ") 60 | mydata$date <- as.Date(mydata$DATE_FROM) 61 | mydata <- mydata %>% group_by(start, dest) %>% summarise(count = n()) 62 | mydata$start <- gsub(",",".",mydata$start) 63 | mydata$dest <- gsub(",",".",mydata$dest) 64 | mydata$start <- as.character(mydata$start) 65 | mydata$dest <- as.character(mydata$dest) 66 | mydata <- as.data.frame(mydata) 67 | 68 | mydata$check <- mydata$start == mydata$dest 69 | mydata <- filter(mydata, check == "FALSE") 70 | mydata <- filter(mydata, start != "0.000000000000000 0.000000000000000") 71 | mydata <- filter(mydata, dest != "0.000000000000000 0.000000000000000") 72 | mydata <- filter(mydata, dest != " ") 73 | mydata <- filter(mydata, start != " ") 74 | 75 | # take sample for testing 76 | #mydata <- mydata[1:50,] 77 | 78 | ############################################################################################################################################# 79 | # GET ROUTES 80 | ############################################################################################################################################# 81 | 82 | # some processing 83 | mydata$check <- NULL 84 | mydata$id <- rownames(mydata) 85 | mydata <- melt(mydata, id.vars = c("id","count")) 86 | test <- data.frame(do.call('rbind', strsplit(as.character(mydata$value),' ',fixed=TRUE))) 87 | mydata <- cbind(mydata,test) 88 | mydata <- select(mydata, X1, X2, id, count) 89 | rm(test) 90 | colnames(mydata) <- c("lat","lon","id","count") 91 | dt <- mydata 92 | dt$lat <- as.numeric(as.character(dt$lat)) 93 | dt$lon <- as.numeric(as.character(dt$lon)) 94 | dt$id <- as.factor(dt$id) 95 | 96 | # create spdf 97 | dt <- as.data.table(dt) 98 | lst_lines <- lapply(unique(dt$id), function(x){ 99 | Lines(Line(dt[id == x, .(lon, lat)]), ID = x) 100 | }) 101 | spl_lst <- SpatialLines(lst_lines) 102 | spl_df <- SpatialLinesDataFrame(spl_lst, data.frame(mydata$count)) 103 | 104 | # get routes from cyclestreet (needs API key) 105 | spl_df <- line2route(spl_df, "route_cyclestreet", plan = "fastest") 106 | mydata$lat <- NULL 107 | mydata$lon <- NULL 108 | mydata <- mydata[!duplicated(mydata), ] 109 | spl_df@data$count <- mydata$count 110 | spl_df@data <- select(spl_df@data, count) 111 | 112 | # remove rare tracks 113 | spl_df <- spl_df[spl_df@data$count >= 5, ] 114 | 115 | # overline overlaps 116 | spl_df <- ms_simplify(input = spl_df, keep = 0.01) 117 | spl_df <- overline(spl_df, attrib = "count", fun = sum) 118 | 119 | ############################################################################################################################################# 120 | # SAVE OBJECT 121 | ############################################################################################################################################# 122 | 123 | # save objects for leaflet map 124 | writeOGR(obj=spl_df, dsn="sp_files", layer="june16", driver="ESRI Shapefile") 125 | 126 | # remove objects 127 | rm(spl_lst,mydata,dt,lst_lines, spl_df, station) 128 | -------------------------------------------------------------------------------- /sp_files/june16.dbf: -------------------------------------------------------------------------------- 1 | u 2 | > A 3 | W count N 909 374 424 25 399 624 285 56 206 276 124 316 20 114 94 45 25 31 25 139 94 310 285 79 33 23 102 79 23 49 45 82 42 660 33 79 47 32 500 160 23 45 509 585 42 467 33 60 564 75 513 82 32 36 81 477 74 10 23 70 62 42 20 9 33 444 106 441 999 152 12 322 225 97 42 33 13 13 81 441 13 441 81 431 10 12 85 237 311 57 254 179 95 40 22 142 49 43 586 10 33 131 11 33 10 74 70 87 86 20 20 13 101 99 16 6 46 24 40 54 41 33 16 39 18 244 59 640 310 50 49 20 81 50 81 6 87 70 76 136 33 43 20 290 103 6 37 6 33 33 66 43 48 177 16 27 467 255 391 20 13 86 49 49 13 20 49 119 33 20 13 494 218 267 46 49 1288 12 40 454 995 984 48 28 936 12 38 10 66 936 226 414 806 2180 2760 26 320 134 188 210 436 436 5 5 188 26 13 25 154 288 21 279 41 322 159 47 67 87 279 67 74 34 179 226 284 215 433 399 57 1689 19 499 179 274 1389 1643 87 586 2545 43 60 186 576 129 963 373 99 274 402 34 592 18 34 21 479 564 12 504 6 56 63 342 279 317 275 125 130 160 344 175 99 502 59 1007 47 106 80 175 197 290 921 458 237 26 325 688 346 50 203 72 1205 755 62 124 332 126 113 239 139 113 510 185 98 438 332 1145 148 1070 1475 26 72 893 351 1244 4454 21 275 3781 62 10 72 10 62 869 1089 4264 1119 4133 10 124 404 124 62 234 885 10 80 148 401 185 351 99 186 613 114 903 760 1399 4367 2251 972 191 744 992 1222 152 82 17 385 32 792 132 323 727 972 132 339 4860 1563 2535 10 92 68 117 296 926 4102 4134 274 758 5 3936 3941 4755 221 164 135 1426 134 168 430 517 1461 69 296 152 758 13 55 96 41 758 903 1632 910 55 41 899 562 56 218 32 35 22 5 97 210 700 1627 5499 5477 22 5187 562 769 769 374 1294 2932 2373 344 2711 431 1196 517 251 295 505 916 916 344 448 2243 231 626 196 2083 3008 118 100 3924 741 251 1745 4495 558 41 6454 1965 461 427 20 97 466 761 682 782 181 125 37 2429 12 675 21 230 782 1733 1745 8 8 292 6446 1780 35 6446 35 643 117 294 767 15 57 2022 1195 538 864 22 1112 910 51 241 231 196 450 1218 815 2646 1078 294 51 335 200 23 23 230 8 872 538 973 15 124 62 833 1806 245 445 455 345 964 404 1213 40 164 323 273 1371 200 497 497 159 525 150 463 1064 423 777 13 1209 1473 307 55 335 4914 2146 548 484 392 955 4607 1632 159 442 2085 5444 996 2279 133 749 2718 1449 2341 111 1309 1036 63 48 1971 1771 858 2629 185 1991 1758 151 777 1225 3095 1870 1219 973 2672 2466 596 468 141 1830 106 2272 2378 2660 194 499 5440 856 2672 455 4045 1528 230 78 958 2670 24 1051 725 379 13 484 141 127 127 731 2667 250 1602 30 144 86 5681 267 75 75 144 15 600 3220 163 185 151 233 237 363 861 1224 930 3115 872 237 48 5256 365 1049 924 1008 43 1139 1139 924 923 1417 4458 2608 1125 3747 48 972 271 808 274 153 1695 3342 2371 637 1255 162 1250 3917 792 457 335 758 681 930 151 1695 75 301 1931 5047 522 4439 973 903 792 559 636 185 86 380 345 525 589 1428 896 359 77 474 3618 190 43 2580 2960 386 475 1574 1541 2631 329 3998 190 1574 1772 3486 624 1432 1574 43 77 359 190 1541 872 1574 215 215 43 872 215 215 1541 1789 185 3671 872 43 405 3486 872 1541 3918 80 895 23 345 129 727 289 1564 575 26 434 3918 129 1607 1689 4526 209 4099 2944 392 891 155 469 1300 4263 2355 665 369 1420 23 174 2615 23 1420 1300 151 1584 35 139 51 4162 1559 2373 2888 5788 391 3054 367 102 183 196 237 195 239 2005 202 7 1606 705 293 1931 102 1510 96 183 202 1471 569 236 139 1218 130 163 2847 1571 2298 139 10 91 48 339 1462 113 1462 1469 183 0 91 0 7 236 75 2889 247 7 712 49 193 103 656 204 765 1533 420 1036 109 895 96 1561 923 805 920 3747 1624 64 236 569 1843 394 54 1104 592 1067 2238 6166 1454 49 15 381 472 3749 3409 1244 2856 4067 1827 4939 1727 2808 426 1200 845 535 3905 3302 64 2267 1035 371 101 614 2010 69 4870 1328 0 0 0 1200 2307 345 3918 0 0 1067 0 829 386 2466 422 829 101 386 101 3916 125 68 978 498 2838 4775 587 3071 1168 7 1447 2369 2833 824 696 621 594 19 49 99 84 5192 1414 15 84 3204 491 3329 2357 259 952 1111 770 208 562 0 0 3329 562 853 2479 907 3541 2691 12 147 1326 1140 2272 1326 102 4768 1580 19 766 594 3541 766 808 1410 3083 2272 766 1410 2272 3905 75 575 19 41 353 133 1182 575 4768 1561 90 151 3495 47 40 1302 1074 1561 4768 1272 1841 685 71 1171 3105 489 925 2741 504 449 7 40 1322 1515 212 279 352 1372 760 548 969 209 1571 950 1533 566 2678 971 220 696 943 179 3258 7076 186 93 3006 2853 600 4046 387 1030 3157 2106 1879 973 30 149 5 89 2950 56 912 2529 455 330 781 790 366 1742 3173 1173 349 388 179 2876 423 185 203 1296 196 829 1095 277 1393 349 1285 763 441 471 1209 781 454 3551 698 441 454 3963 1619 646 215 556 225 193 754 531 3550 413 133 168 1534 5542 1577 695 2437 8981 7033 920 849 1197 18 3140 7289 2422 1891 920 277 9909 32 224 10132 3490 192 28 1710 169 4362 1575 7203 641 3443 2835 1225 6413 79 303 549 1620 1978 5243 290 2181 820 989 5500 6178 745 653 4960 207 6 6 849 1577 6 2437 6 15 192 701 2276 683 505 6446 2568 462 1719 6 277 5627 175 523 337 799 1442 60 1185 524 6200 1884 157 1839 4483 1144 1136 4142 1518 5836 67 96 5280 140 1953 2411 773 2553 1515 2985 3487 5041 845 144 539 1136 773 671 1515 773 1518 4163 549 3443 4251 3624 2600 1883 1136 2553 2112 1634 5821 1045 3125 1966 2420 591 2241 1045 86 437 575 129 1983 129 1518 5710 543 543 1883 1885 2238 3152 0 0 1443 376 1877 1191 3429 2591 3182 1618 1069 389 440 1574 2156 1626 2156 2505 845 1095 838 3076 1006 2699 1255 135 2510 933 3244 168 3206 1257 11 1244 1497 1013 2046 2130 2193 67 1701 5368 2326 3519 1666 165 410 25 1108 2926 4596 22 1879 5061 3937 4852 3916 3376 802 67 165 2399 1482 1591 2381 540 271 3200 1560 2260 19 4637 73 1591 137 3216 7 1013 2503 104 344 204 49 2032 200 225 1767 307 97 3343 124 468 18 1983 1749 1096 367 502 61 234 845 3125 467 635 365 2339 2245 444 1295 1473 4673 350 94 335 2845 2456 15 2166 1178 117 478 2260 440 2691 339 118 2539 152 64 312 875 79 477 2041 559 2301 101 253 1926 1987 115 1551 665 4008 115 1591 1551 2046 522 4530 3732 6473 1965 908 1473 4991 4051 319 2455 2651 3804 3152 611 1880 869 3365 2261 54 5238 472 1047 3365 472 472 1276 1562 117 253 4867 440 22 1982 1204 227 22 1047 2215 1081 2231 307 422 1982 1859 1276 2215 533 1445 639 63 2041 735 648 939 0 307 959 525 1362 1553 1081 1059 0 639 2269 70 913 2819 1553 953 1520 0 0 0 558 1798 0 502 0 0 639 115 2834 1036 5852 2510 2812 2135 915 769 2949 1069 0 1069 502 2106 2119 2513 4087 5021 478 1859 215 4860 2319 796 566 1959 554 700 3351 118 3091 0 1447 0 2516 1828 1365 2119 1295 1124 4344 1903 1349 85 3526 214 1921 4631 7 312 2455 1859 86 3582 1252 473 892 5468 654 347 3353 337 86 1896 1188 275 1665 869 7617 2235 2454 0 0 2194 1766 2734 0 0 86 0 2949 99 2180 3288 194 939 2074 5013 190 1446 164 1752 732 456 3124 1383 1157 118 1859 1440 405 2491 405 3288 981 1031 2585 1440 3288 628 65 2556 1181 259 553 75 903 2450 1162 2001 1350 3766 2380 63 1766 2484 2315 1705 1112 50 387 356 583 1178 743 39 2012 2591 1559 193 289 1061 2489 144 1415 1023 3064 2368 1547 1415 1252 1061 2771 1964 2886 1677 144 1252 3864 4131 4604 5023 302 1500 2279 5320 1445 4406 5227 2400 441 1797 3120 349 547 1570 1425 3895 3334 432 586 3309 700 43 1425 586 1236 357 349 2313 743 1061 6574 3265 1848 1840 2219 552 1107 560 1591 2637 1627 1267 2142 2694 2426 528 2356 1089 1605 1147 1214 1159 7733 3675 1563 63 2400 5988 3526 1272 4008 2479 4008 3064 65 7668 400 6505 2919 713 272 413 706 566 1441 1196 2190 5863 1837 1675 134 258 210 756 551 205 4349 1550 2275 7444 913 558 2085 598 2237 669 464 2302 2463 370 3810 3140 1468 1047 1763 216 1321 265 1627 107 158 107 2489 2475 7920 1312 1081 2266 131 141 1959 405 2242 405 2475 511 1495 89 42 436 1517 7360 1553 464 2702 769 1822 2568 556 1093 28 1385 1284 3351 1157 216 1358 3165 178 642 1463 312 370 551 551 551 1284 3351 1062 1100 1819 1135 1178 272 272 3351 1556 65 1070 609 1754 571 38 114 1845 1848 1164 1242 314 1848 1178 7360 598 705 758 1506 437 243 1307 14 747 2370 603 1672 482 825 2018 841 1423 409 721 1224 2108 2019 1848 1672 291 451 2183 103 1230 2406 116 56 60 793 630 107 2215 1331 2332 2304 1403 2002 1852 1817 72 2638 2291 66 2340 1381 38 2112 1468 213 907 2379 157 43 1461 1869 1822 2710 4196 57 1404 1973 3215 305 148 162 1616 2018 479 756 1089 1238 1927 30 1268 30 1157 2648 549 250 2207 268 4265 2713 246 406 2069 770 344 479 747 635 43 528 2468 495 1963 1606 527 2173 71 2585 1121 639 115 868 2090 5270 86 78 3870 566 5437 1229 426 161 144 148 2390 4829 491 2090 1229 1456 5437 314 6182 2893 1296 0 89 541 1813 37 14 3377 419 142 607 341 38 579 1119 747 141 302 2011 1960 1073 746 1805 1157 3091 4549 991 1182 5384 332 161 300 300 3290 213 787 2428 632 62 820 1628 375 247 4705 4662 2086 1925 4720 5228 1935 731 104 274 910 2454 1189 30 4801 151 1363 2225 6927 1662 804 416 880 424 8 839 2664 286 253 539 376 1286 302 2664 249 488 1160 1083 596 1209 182 323 7303 565 517 2544 1714 2156 124 552 2389 9928 680 827 455 856 2819 74 1029 957 219 1459 1029 2156 63 341 3761 470 192 1373 451 229 333 165 64 1118 4034 2573 464 869 116 1141 269 707 197 17 27 508 2591 3011 269 165 2976 2030 2668 6569 1161 370 1786 182 2689 2901 52 34 2968 2154 181 68 96 216 229 607 3917 2943 165 31 31 142 151 2313 2546 194 1423 675 31 18 18 216 114 68 18 86 1314 108 1352 2703 90 182 68 96 2485 386 1321 90 216 652 377 509 632 813 2006 22 616 90 194 37 1007 2350 460 207 1231 108 2884 2042 34 75 75 127 1118 192 1807 2550 1102 3271 75 7 2573 230 314 44 291 18 19 2034 850 1229 813 216 75 425 381 1234 1257 2138 597 1229 2350 5 2896 1635 2308 377 192 381 74 3292 1847 3727 491 44 687 1567 2456 3041 2974 52 3235 3315 37 813 178 2490 163 44 2119 421 1523 313 147 1546 2567 1715 118 194 2684 372 467 1331 1330 856 0 0 89 0 0 31 44 922 147 31 1484 1484 402 250 141 2387 0 1166 2812 573 364 3237 467 286 2490 127 0 604 2130 844 2150 2755 52 28 1024 833 898 11 609 388 1367 74 2299 2655 618 662 510 794 483 1214 195 27 3594 1672 1330 314 565 19 1330 1183 421 489 1255 1747 2112 3858 6 35 1234 2138 407 3998 124 1723 4599 146 1424 2706 107 3891 75 66 1161 564 31 564 4184 54 639 3692 1101 4235 1240 1585 1226 924 428 142 1762 536 2527 2471 1504 2970 6725 127 6 1948 2452 2411 127 35 103 2518 34 18 6 145 18 172 536 501 197 1049 2017 35 2484 125 165 124 1214 2017 197 1755 228 2206 827 703 153 550 778 2288 82 2927 275 337 3906 1888 125 1630 2109 213 566 290 69 423 209 555 1724 1523 1163 1747 3239 959 1595 1568 741 461 46 362 7352 81 418 239 257 18 1712 33 239 1163 1986 932 227 741 968 741 153 550 657 1231 257 1231 311 329 1301 533 106 250 82 1163 1231 311 311 3146 1703 107 3387 3387 257 3461 74 113 177 765 396 6734 711 2259 70 2107 1552 137 327 3612 955 260 277 90 346 4618 82 259 3505 1061 1621 648 88 2225 108 1442 266 11 153 227 181 746 590 156 1368 54 81 81 580 81 1101 3387 31 244 244 2259 15 13 164 1665 3441 169 1400 583 1191 1450 1808 2309 454 618 274 1410 4286 1832 29 63 9 320 271 444 1675 7 87 2932 2317 1815 407 87 271 82 195 113 810 2776 1974 35 231 96 1059 1541 2422 1994 502 146 96 153 64 1712 15 458 705 2377 2272 2218 1472 1374 773 278 0 0 408 418 0 177 10739 384 714 66 3169 2079 0 0 0 0 418 2859 1954 2253 24 66 2387 465 2718 1055 91 423 2776 0 1725 445 175 10914 2377 1472 4037 4037 2387 3088 4287 316 793 3962 2317 972 6627 1173 2685 1449 5113 1514 5113 316 3108 1151 22 3244 5 1473 2491 4581 722 6962 38 2029 27 1603 2359 2307 305 846 3175 2137 1623 684 1104 90 1014 1230 11 5934 5355 1063 560 10243 7247 1136 943 421 6999 497 1282 4872 4835 2735 2571 3514 3707 4061 1191 177 6860 1577 365 2709 75 458 3686 12082 2758 467 774 1984 785 1007 3473 4496 927 1781 1405 111 186 910 6513 5208 380 1092 288 622 384 622 869 467 2383 304 7480 698 410 615 7247 4835 2502 4978 2997 2532 1450 3528 2652 3528 1994 625 517 319 758 0 169 0 412 1450 1994 3528 2652 191 0 3776 0 2532 602 884 1325 350 787 725 3215 1225 113 64 1276 539 7165 4729 4729 2652 683 1641 1972 302 2407 1499 780 1627 42 1450 4729 2027 1945 344 4496 1704 573 1030 94 129 444 475 2660 119 356 1189 806 557 138 1276 350 437 8788 165 3198 186 400 2346 3619 437 3182 1189 356 4102 460 816 504 25 1622 1822 132 42 402 175 3511 511 1790 818 1945 153 2689 2299 591 198 3129 2912 1413 431 282 415 1969 2085 956 1392 443 3619 2027 1768 930 979 2348 240 485 3291 2862 7284 2192 2154 1063 1548 644 2338 516 3849 262 48 3816 4309 2613 16072 584 1143 4460 766 272 5 1743 50 75 256 169 22 65 2219 207 787 22 522 8158 298 3382 1342 1772 4833 2263 1177 566 2924 6031 202 2753 3832 40 515 7370 3659 1206 192 2959 2489 2583 5038 1496 2163 3412 488 846 59 54 530 29 88 414 1080 50 4294 54 1496 1109 51 54 2163 3659 2903 980 541 96 8 3129 22 29 79 120 809 324 171 363 563 2566 156 274 36 171 1574 3500 1357 5275 4115 51 1175 1282 4173 1190 3856 4422 2549 4708 2193 2021 324 11 918 2041 820 820 2836 46 2629 445 335 206 899 9901 9456 521 696 7295 5 197 867 2551 340 784 0 46 216 3474 0 2613 955 0 29 3560 1184 2004 1984 1004 984 2551 1356 1740 31 4625 1296 1543 1613 46 2041 9662 478 1535 444 238 774 520 94 40 1348 1693 8788 7284 91 131 5760 6941 185 131 193 1040 33 155 786 2403 11 478 16 4588 1287 251 5 1536 422 646 8455 598 64 1194 499 1153 3138 587 1431 1118 5611 593 5 54 54 1189 251 95 90 2290 4994 346 144 56 794 7994 144 3363 1190 312 384 1190 7994 42 1444 1652 104 1279 1022 96 1190 1652 3342 416 394 15 10496 7994 109 206 1300 825 1204 530 530 3342 1720 1444 8524 1300 1022 212 1273 4010 216 192 2422 6102 1050 1444 3342 6144 1033 49 2731 2348 488 5764 1779 5921 20 409 3032 3952 217 32 1268 5 5946 335 198 1333 216 193 1094 521 53 332 438 602 43 10387 337 1767 964 4476 2515 4409 1735 3480 3045 360 844 2290 1289 2663 917 906 5503 157 1653 1549 3302 1900 7521 260 5828 453 9934 184 14 195 4815 1013 0 5098 0 0 0 0 0 0 3904 0 0 0 0 0 0 1735 3175 5255 1289 542 1007 6817 1717 294 2801 2357 355 2820 422 1840 60 180 1369 244 5306 8659 115 475 542 499 76 108 761 1506 6021 4320 33 82 945 912 5661 5764 11 1904 11 184 1262 571 66 0 0 0 571 1026 814 337 571 624 25 14 6002 814 66 1159 347 198 7154 6256 11 1262 0 0 960 0 0 0 0 0 11 108 76 0 814 1151 994 370 0 48 0 1735 1608 604 805 346 6 42 2109 501 67 1289 6069 4254 5680 604 0 0 370 8 34 0 0 1175 1175 530 530 0 0 1296 0 1264 5934 7129 0 1735 560 1090 2222 0 0 0 501 1735 0 0 0 0 0 0 0 0 7638 1289 4739 1330 0 0 0 1090 0 0 0 0 4385 2710 1376 2584 2222 1090 1849 64 0 1264 76 0 2222 440 2270 0 0 0 0 0 0 1265 1289 0 1266 333 76 0 1090 0 1651 1266 0 5715 746 4650 261 5673 353 1443 703 605 403 964 0 2290 353 0 0 76 264 422 487 76 494 494 848 328 439 1776 542 844 450 1618 704 947 1823 208 1155 965 919 473 744 888 595 885 146 40 624 1166 33 7 1723 4254 1904 2857 6915 829 1090 1157 589 902 2273 199 1028 795 1077 1614 457 113 2595 1200 7287 1001 4351 709 741 206 1245 933 1139 903 342 1320 503 6040 777 7584 809 254 1880 1415 440 254 161 1665 208 194 349 2933 107 349 4351 194 273 76 842 161 4351 1726 2786 8318 23 63 666 8178 2717 4982 812 30 440 30 500 264 360 394 274 115 7188 876 1252 1016 710 176 75 415 295 3456 295 1016 1929 6389 56 7 438 4544 4913 1127 34 12 32 43 52 110 1291 275 35 605 2072 1149 1936 2226 295 310 24 2400 8527 1396 176 43 420 35 73 30 110 12 736 555 144 52 115 830 1283 750 94 95 119 1508 1948 447 1050 9728 66 210 295 1035 298 75 345 232 2458 51 70 875 2961 127 227 14 2474 8427 382 1051 130 8315 1396 1616 193 6212 2103 719 66 127 3993 509 546 804 677 42 29 480 1721 4913 4815 120 3683 458 29 451 5 414 2105 370 3525 574 236 124 5861 2269 1725 416 681 1724 3657 3057 2376 174 2865 1896 410 1252 410 131 65 1409 1159 2152 4249 566 1819 669 2393 2296 1665 675 2865 1505 1505 75 555 18 432 555 302 65 955 1151 778 1129 2157 52 361 71 247 389 1575 927 1026 698 10936 6589 1482 23 3425 3171 422 367 15185 2093 10218 1476 2174 1776 2606 1272 1207 8548 6637 755 406 232 734 1806 2608 3920 7692 310 1675 8878 846 998 3186 5692 4392 595 566 3570 256 4165 2599 1550 100 1913 297 27 1489 104 97 2963 8399 2183 421 131 3186 2183 302 2661 600 1378 1228 3679 508 1279 3286 2892 1536 1119 306 1033 449 1295 75 82 82 891 3186 421 736 82 566 1321 2865 82 82 0 6141 3386 556 2102 473 1791 992 186 181 871 977 457 1658 10 1164 214 206 1946 3733 547 2207 1047 742 2451 1046 2340 968 488 247 1653 530 818 872 174 687 1653 7 95 29 7257 37 0 0 1529 11049 7294 0 0 0 0 0 0 0 0 0 0 0 0 530 0 0 11159 0 0 0 0 687 530 268 2475 6141 0 2770 301 36 537 865 687 968 304 8095 113 825 537 968 1322 12189 914 84 506 12025 164 11 236 3930 216 2691 304 3733 197 1833 535 501 783 391 11 914 37 1196 142 2003 103 208 107 1555 136 3875 2463 197 2570 884 4420 2581 18 328 154 1104 655 1853 2916 245 4420 186 307 552 385 21 4957 358 1260 270 183 5291 413 1756 4118 1173 2734 5 3579 752 468 2266 410 506 457 1173 1255 3617 3922 399 208 150 3578 2102 261 2836 4118 208 2345 268 992 186 405 278 483 2816 5161 132 1537 645 268 1519 2059 531 865 891 3223 3296 1865 2059 1026 1237 1273 1950 107 180 1898 379 3438 2363 438 19 95 1512 2035 3954 304 164 753 1205 6770 1803 914 1519 959 3588 4523 2764 2418 3239 32 53 5121 142 1208 52 128 1332 625 217 345 2762 1394 4476 147 790 3774 364 536 329 273 171 34 160 79 350 1589 959 1803 1303 473 2545 778 1530 337 120 584 1475 1683 664 2194 817 594 1441 197 305 1130 230 832 1828 387 233 1708 337 329 1683 329 3133 1758 279 4565 556 74 82 558 208 582 1371 832 456 1472 622 3358 1207 5881 194 591 9 1582 1112 990 464 1364 3556 76 5759 532 532 3358 1207 532 246 135 59 3604 981 532 162 162 3606 718 2794 2076 1319 412 1552 594 4016 284 314 1207 162 5 4023 219 1544 59 219 162 3604 337 1167 669 1714 1566 5131 1440 1566 452 3604 337 150 1290 2739 867 354 499 580 334 2935 2266 3051 489 259 1604 4739 240 805 33 193 1263 690 7 48 1375 690 334 208 53 1095 1323 67 31 895 597 947 674 1918 1163 85 51 19 495 1071 213 472 1244 31 334 13 966 1318 947 69 12 83 1719 396 2462 1554 607 1678 1848 614 580 1743 1095 396 914 1397 42 1950 3056 1520 347 1246 632 0 0 0 1005 1461 0 914 91 2574 2165 711 1476 798 237 1997 1441 349 0 0 881 881 91 94 503 1604 0 0 1039 0 0 2342 8 357 757 2279 382 2935 1039 1382 1023 257 1166 130 2633 923 595 336 630 1504 50 1095 1166 474 1498 4184 1894 205 1142 686 29 40 8 1174 3431 646 748 957 1075 865 84 1289 1112 2562 867 3236 76 200 3332 5611 579 444 1225 1289 3332 867 2633 40 646 335 699 393 646 1180 2157 29 200 1566 923 1465 7076 62 21 444 335 7824 200 21 82 1289 923 144 50 402 463 79 50 94 495 1893 1411 740 245 837 2029 2138 336 1075 262 728 1282 375 1802 2133 1213 838 46 0 3542 3376 52 1446 150 357 52 884 1987 42 1566 780 78 52 1483 150 76 660 1036 2877 702 42 903 241 1144 1078 79 1446 38 846 32 46 2207 273 1625 6 1528 2749 8 878 176 86 334 13 1480 553 342 2066 79 330 1949 566 217 114 0 88 479 27 447 1772 2014 865 18 2049 2095 2155 637 1179 406 1718 214 205 1420 523 1072 1083 673 522 733 523 0 1366 162 752 63 743 37 213 1836 409 751 1336 147 740 3508 248 105 4195 1643 20 12 2431 4526 2078 350 619 453 278 73 2385 614 436 498 116 603 334 0 1151 399 1747 348 20 1475 479 105 1262 2644 769 3801 3211 1915 298 193 43 399 103 980 345 382 298 619 924 1362 606 1159 886 459 317 819 735 1094 2005 49 29 262 269 154 1040 103 298 1187 1104 37 1278 3526 3477 691 3616 2067 632 2018 2584 1182 179 640 2522 302 1172 204 667 1400 2544 1865 1566 162 197 402 1220 580 1017 458 1039 574 2006 1577 505 205 1566 350 1610 2011 276 26 35 2041 774 76 707 1510 2066 162 1861 4826 2895 49 268 2413 1091 67 3869 2398 682 253 742 57 2004 928 1103 1029 1812 199 3448 1009 1045 487 178 75 662 1746 136 446 26 184 844 58 182 206 162 220 2416 1464 2682 2469 1388 1145 840 2563 1516 2409 702 217 593 3003 472 46 1958 102 410 242 1520 2326 3254 935 1463 1612 305 2005 2443 2466 1463 1791 1463 2443 2332 134 2005 1747 2049 940 2438 1246 2355 1908 1510 102 102 931 910 554 6 1741 554 199 798 4793 746 665 1471 1060 846 150 305 3656 197 3558 522 409 295 909 179 1076 69 292 745 1267 204 33 1076 33 60 533 317 3246 1245 3433 113 837 73 417 722 2145 2842 1872 1613 1875 364 1224 471 2371 1329 83 40 177 506 539 1792 83 498 698 1246 126 934 177 58 1221 25 197 142 1223 212 262 471 3568 2218 24 34 24 166 197 1370 205 152 32 2025 63 635 404 2229 509 505 197 126 1510 1979 2838 228 3463 232 24 3047 869 933 859 1945 3024 15 422 519 1766 2948 26 47 762 75 207 1014 209 2838 698 361 859 26 895 36 47 895 75 169 700 3054 409 991 858 197 409 914 3904 977 80 860 231 950 824 1066 75 702 933 26 75 858 364 2948 150 1014 26 558 1382 933 36 446 2392 4016 558 950 558 80 1035 63 427 5981 1014 36 762 96 867 233 933 47 10 14 51 134 119 119 427 933 150 6100 119 80 3769 201 233 36 831 694 218 3295 933 96 1061 150 1061 96 57 77 3136 1281 1207 5598 233 150 141 71 507 2651 9 867 292 1500 947 957 159 82 993 22 629 921 1695 1981 988 1912 1496 885 487 22 1402 0 0 3170 34 195 19 0 781 1532 1408 409 2593 1315 1858 596 2008 27 2334 276 1867 1010 469 38 197 34 849 1144 1137 271 316 1232 367 1545 1377 2510 656 1867 71 2014 359 422 831 38 468 1829 2311 534 5 1548 83 135 161 22 4384 2081 31 51 311 10 146 44 550 2066 527 11 84 1221 1918 226 133 1175 46 966 89 72 2165 925 1918 152 1236 311 246 77 2261 897 2961 109 1423 187 764 1929 2476 364 152 51 195 120 2953 282 78 517 33 2130 1350 680 440 371 6 590 496 1996 1022 541 497 900 753 26 45 166 25 327 426 566 680 240 2345 636 711 999 282 45 26 282 810 271 5 295 240 267 568 27 522 267 301 367 10 282 549 566 204 249 77 89 282 240 583 534 10 426 204 727 550 124 407 571 148 574 78 108 560 71 610 103 681 81 343 234 305 3855 1684 144 754 59 24 308 99 544 719 2039 84 5 647 235 77 5 453 183 289 198 54 54 294 490 70 204 6 251 142 6 490 334 574 652 769 3271 2327 295 334 150 240 1239 260 78 574 467 368 103 24 3420 168 205 64 91 469 133 2660 518 275 236 435 150 174 206 59 256 19 700 1075 30 73 803 434 143 207 183 1258 224 775 101 681 147 367 147 182 2098 466 1168 362 125 283 466 59 24 769 89 97 183 902 431 148 948 232 730 786 261 142 261 786 64 143 89 462 486 152 74 64 13 236 462 2651 147 157 857 222 335 534 917 959 209 148 267 100 2035 1471 202 369 607 938 252 326 427 447 776 162 902 45 447 326 841 107 88 753 1574 711 1420 175 262 1312 2738 433 84 138 618 513 1825 512 1200 0 44 10 34 181 130 34 40 314 788 1690 49 169 209 2620 118 129 1390 2635 722 341 225 2192 735 316 387 381 846 1377 129 1020 118 360 622 158 270 1165 394 708 39 104 902 341 129 560 62 469 51 1071 94 3247 627 275 270 560 1720 1008 91 627 181 104 1102 573 104 529 114 39 1033 322 1019 115 181 922 385 63 52 447 104 2086 1161 2957 4118 1405 1807 332 134 205 608 538 635 606 21 828 217 12 2627 466 10 215 323 828 21 345 138 118 441 323 64 151 33 188 511 256 1254 329 40 121 239 6 535 1127 273 154 6 193 253 76 53 86 59 892 560 359 104 846 118 302 870 210 92 98 160 1381 1676 133 1768 269 1674 301 508 953 28 100 10 281 2426 342 224 125 217 318 273 412 85 64 21 296 34 854 475 379 13 701 238 58 1191 48 414 1858 907 284 314 291 1190 669 890 86 12 1211 953 1860 677 40 828 54 264 986 28 58 404 1049 589 191 304 1937 18 18 20 105 82 232 66 27 245 1105 63 282 54 241 245 498 21 7 473 25 9 52 297 536 504 74 15 6 533 98 239 432 72 190 124 190 72 549 86 105 91 163 22 99 141 104 20 54 20 16 141 20 304 86 27 105 27 1076 156 0 20 0 0 0 0 28 0 304 54 58 34 122 501 14 814 113 14 133 13 100 25 100 6 20 125 13 105 13 1069 20 298 15 7 318 13 7 100 93 80 48 46 65 337 812 105 812 11 1305 220 198 12 306 121 52 146 251 47 28 389 52 251 292 38 52 13 99 20 272 285 529 418 447 427 451 414 218 172 90 609 414 90 6 10 1023 1537 25 13 1407 130 609 414 61 1143 534 66 64 19 7 156 48 13 127 58 154 31 195 115 25 9 527 259 34 115 31 106 7 402 22 105 12 116 306 334 5 5 92 622 85 173 15 18 207 210 383 179 29 77 144 63 174 140 111 92 167 5 93 23 69 93 69 6 130 20 113 7 93 32 57 12 304 271 398 163 11 90 152 316 44 380 13 31 13 113 20 130 20 713 411 73 40 5 13 203 170 73 163 18 23 333 438 8 21 5 224 203 7 12 16 7 5 222 101 7 69 159 152 221 188 33 33 5 119 69 124 463 296 759 635 33 16 486 266 171 369 540 194 346 62 7 100 62 100 256 107 453 353 100 --------------------------------------------------------------------------------