国产人妻人伦精品_欧美一区二区三区图_亚洲欧洲久久_日韩美女av在线免费观看

合肥生活安徽新聞合肥交通合肥房產(chǎn)生活服務(wù)合肥教育合肥招聘合肥旅游文化藝術(shù)合肥美食合肥地圖合肥社保合肥醫(yī)院企業(yè)服務(wù)合肥法律

代寫(xiě)COMP3506/7505 Data Structures算法
代寫(xiě)COMP3506/7505 Data Structures算法

時(shí)間:2024-09-09  來(lái)源:合肥網(wǎng)hfw.cc  作者:hfw.cc 我要糾錯(cuò)


Assignment Two  25%

Algorithms and Data Structures  COMP3506/7505  Semester 2, 2024

Due:  3pm on Friday October 18th (week 12)

Summary

The main objective of this assignment is to extend your knowledge from assignment one to build more complex data structures and solve more complex problems.  In particular, you will be working on graph and compression problems.  In this second assignment, we will leave more of the design choices up to you  (like the k-mers part in A1).  This assessment will make up  25% of your total grade. We recommend you start early.

A Getting Started

The assignment is structured similarly to assignment one . The skeleton codebase, data, software dependencies, implementation rules, are described below. Rules  for success: Think before you code. Think before you post an Ed question. Use a pen and paper. Don’t be afraid to be wrong.  Give yourself time to think. Start thinking about these problems  early. Read the entire spec before you do anything at all.

Codebase

The codebase contains a number of data structures stubs that you must implement, as well as some scripts that allow your code to be tested. Figure 1 shows a snapshot of the project directory tree with the different files categorized. Note that we provide you with (simplified) versions of the data structures built during assignment one. You are permitted to modify any of the files listed. You may also use structures/util.py for any utilities that do not deserve their own file, or add your own data structures if you think they may help; store them in their own files inside the structures directory.

Data

We also provide a number of test graphs for you to use, but you are encouraged to build further test graphs of your own; you may also share your test graphs with other students if you wish.  Each graph is represented as a simple text file that stores an adjacency list for each vertex in the graph. There are three specific types of graphs, each with their own subdirectory. All graph types are undirected. 4N graphs are simple graphs where each vertex can be thought of as occupying a position on a square grid/lattice.  As such, these nodes can have at most 4 neighbours. KN graphs are an extension that allow an arbitrary number of neighbors. POSW graphs extend KN graphs to apply positive integer weights to edges.  The appendix in Section M contains an example of each graph type.

Dependencies

Our codebase is written for Python 3.10+ as we have provided type annotations; as such, you  will need to use Python 3.10 at minimum.  The second assignment has one special dependency – the curses library – that allows your algorithms to be visualized in a simple terminal window.

structures

dynamic_array.py

linked_list.py

bit_vector.py

entry.py

graph.py

pqueue.py

map.py

bloom_filter.py

util.py

algorithms

pathfinding.py

problems.py

compression.py

test_structures.py

test_pathfinding.py

test_problems.py

Figure 1 The directory tree organized by data structures (inside the structures directory), and the three executable programs (in the root directory, coloured orange).

4N

one.graph

two.graph

three.graph

four.graph

five.graph

KN

one.graph

two.graph

three.graph

four.graph

five.graph

POSW

one.graph

two.graph

three.graph

four.graph

five.graph

Figure 2 The data tree organized by graph types. 4N are the most simple grid-based graphs. KN are graphs where each node has an arbitrary degree. POSW are graphs with arbitrary degree nodes and positive weights between the edges.

If you are developing locally, you may need to install curses. See the documentation1 for more information. This library is already available on moss.

Note that you can do the entire assignment without using the visualizer, but it will be less fun and you won’t be able to show off to your friends. The visualizer is only useful for the earlier pathfinding solutions on grids (Task 2), and it must be executed in a terminal window.

Implementation Rules

The following list outlines some important information regarding the skeleton code, and your implementation. If you have any doubts, please ask on Ed discussion.

d**; The code is written in Python and, in particular, should be executed with Python 3.10 or higher. The EAIT student server, moss, has Python 3.11 installed. We recommend using moss for the development and testing of your assignment, but you can use your own system if you wish.

d**; You are not allowed to use built-in methods or data structures – this is an algorithms and data structures course, after all. If you want to use a dict (aka {}), you will need to

implement that yourself.  Lists can be used as “dumb arrays” by manually allocating space  like myArray  =  [None]  *  10 but you may not use built-ins like clear,  count,  copy, extend,  index,  insert,  remove,  reverse,  sort, min, max, and so on. List func- tions like  sorted,  reversed,  zip are also banned.   Similarly,  don’t use any other  collections or structures such as set.  You cannot use the default hash function.  Be  sensible – if you need the functionality provided by these methods, you may implement  them yourself.

d**; You are not allowed to use libraries such as numpy, pandas, scipy, collections, etc.

d**; Exceptions: The only additional libraries you can use are random, math, and functools  (but  only  for  the  total_ordering  decorator).   You  are  allowed  to  use  range  and  enumerate to handle looping.  You may use tuples  (for example; mytup  =  ("abc", 123)) to store multiple objects of different types. You may use len wherever you like, and you can use list slicing if given a Python list as input. If we ask for a Python list in  a function return type, you can use append or pop.

B Task  1:  Data Structures

We’ll start off by implementing some new data structures. All we specify is the interface; the choice of design is yours, as long as the interface behaves correctly and efficiently. You may test these with the test_stuctures .py program: python3 .11  test_structures .py.

Task 1.1:  Fix and  Extend the Priority Queue (3 marks)

A queue is a data structure that can handle efficient access to elements on a first-in-first- out basis.  Recall that a priority queue is an extension of a simple queue that supports efficient access to the element with the highest priority; new elements can be inserted with a given (arbitrary) priority, and the priority queue must be able to support efficient dequeue  operations based on the priority order.  For this assignment, we will assume priority values are  numeric and comparable (so, they may be floats or integers), with lower values representing a higher priority. In other words, we’re going to be supporting a min-heap.

We have provided you with a semi-working priority queue in pqueue .py. Unfortunately, we ran out of time to get it working perfectly, so there are a few bugs lurking in the implementation. First, crush these bugs so the priority queue works properly (1 mark)!

Once your heap is operating correctly, we need to handle a few more subtleties; we’d like to support in-place construction in linear time through the ip_build function, and in-place sorting via the sort function. Note that the in-place operations should operate directly on the data array without creating a copy — running in-place heap sort will yield a sorted array, but will destroy the heap ordering. As such, you may assume the user will no longer use the heap once the sort function has been used.  Welcome to UQ(ueue).

You can test via: python3 .11  test_structures .py  --pq

Task 1.2:  Implement a Map (3 marks)

Your next job is to implement a concrete data structure to support the map interface.  Recall that a map allows items to be stored via unique keys. In particular, given a key/value pair (k, v) (otherwise known as an entry), a map M can support efficient insertions (associate k with v in M), accesses (return the value v associated with k if k ∈ M), updates (update the value stored by key k from v to v′ ) and deletes (remove (k, v) from M). In other words, you will be supporting operations like a Python dict (aka {}) class.

Test via: python3 .11  test_structures .py  --map

Task 1.3:  Implement a Bloom Filter (3 marks)

Bloom filters are an interesting probabilistic data structure that can support extremely efficient and compact set membership operations. In particular, they use hashing in combination with bitvectors to toggle on sets of bits; when looking up a given key k, the key is hashed via a series of unique hash functions and mapped to various indexes of the bitvector.  Next, these bits are observed; if they are all on , then we return True which means “yes, this key might be in the set.” Otherwise, we return False which means “No, this key is definitely not in the set.” Your Bloom filter does not need to double check that the True values are definitely in the set; that job is for another data structure.

Test via: python3 .11  test_structures .py  --bloom

C Preliminaries:  The Graph Class

Many of the following problems (all of Task 2, and some aspects of Task 3) will require the use of a graph data structure. We have provided a concrete implementation of a graph data structure for you, and you will need to get familiar with it in order to progress. The graph types are defined in structures/graph.py.

Graph Types

There are two key types of graphs.  The Graph class is the base class which stores nodes and edges.  Each node in the graph (Node) stores an id which is the index of the node in the graph’s adjacency list. For example, if you have a node with an id 22, this means that the node will be stored at the Graph’s self ._nodes[22] and can be accessed via the Graph’s get_node() function. The Graph also provides a function to return a list of neighbours given an index/node identifier.

There is a special LatticeGraph type that extends the Graph class (and a LatticeNode that extends Node).  This specialized graph is used only for graphs that are placed on a lattice. In other words, these graphs can be thought of as simple grids, where each vertex has between zero and four neighbors. As such, some additional properties including the number of logical rows and columns in the (4N) graph are stored. For your purposes, the only real difference you need to know about with this special type is that you can ask for the (x, y) coordinates of a given LatticeNode using the get_coordinates() function. You can also directly return the nodes to the north/south/east/west using the appropriate get_north() (etc) functions.

Your Implementations

All of the following tasks have pre-made function stubs. You should pay close attention to the type hints so you know what is expected to be taken as parameters, and what should be returned.

Figure 3 The Mega Gurkey – Artwork by Jesse Irwin.

D (Optional)  Backstory for the  Remainder of Assignment Two

Last year, the COMP3506/7505 cohort helped Barry Malloc capture an enterprising Aus- tralian Brush Turkey (named Gurkey Tobbler) that was ruining his garden. Afterwards, the chief scientist at MallocLabs (Dr. Amongus) transported Gurkey to the lab to conduct some genomic sequencing. Thanks to your great work on DNA compatibility, Dr. Amongus  has since discovered that Gurkey DNA is compatible with that of the Loxodonta Africana , the African Bush Elephant!

While this is a crowning scientific discovery, there is one (big) problem; Dr.  Amongus has created a giant hybrid mega Gurkey through the irresponsible use of genetic modification tools. Our goal in this section is to find the mega Gurkey before it’s too late, and to help Barry conduct further analysis on the Gurkey genome.

Meta comment: Why do we make up these crazy backstories and bury details inside them? Well, because you need to practice looking at a problem you have and extracting the important details. It is highly unlikely you will ever be given an extremely well specified problem.  It is also a lot more fun this way :-)

E Task 2: Pathfinding Algorithms

Getting Started

To get started, we will focus on lattice graphs. Note that we have provided some graphs for  you already, and the ones we are interested (for now) are those in the data/4N directory. However, your solutions here must also work on the data/KN and data/POSW graphs (note  that KN and POSW are the same types of graph if an algorithm does not use edge weights).

We have provided a program called test_pathfinding.py to help you test your al- gorithms. This program allows different pathfinding algorithms through two dimensional mazes to be tested (mandatory) and visualized (optional).  Note that in order to make  life easier, we’re randomly generating the origin and goal vertices, so you will need to  supply a seed to the random number generator (via --seed) to yield different origins and  goals each time you run the program. All implementations for Task 2 must be inside the  algorithms/pathfinding.py file, where appropriate stubs are provided for you.

Task 2.1:  Breadth-First Search (2 marks)

Given some arbitrary start vertex u, and some goal vertex v, Breadth-First Search (BFS) systematically walks across the graph until either v is found, or there are no remaining vertices to explore.  Figure 4 provides a sketch of this process.  You must implement the bfs_traversal() stub; note that both the visited list, and the path, are expected to be returned.  Please see the type annotations for the specific details about what should be returned.

To make your results reproducible, you must enqueue/push the unvisited neighbours in the order they are given to you from the get_neighbours() function.

Finally, while we will be visualizing our BFS on the lattice graphs, you must ensure  that your algorithms translate to graphs with arbitrary degree.  This should be trivial to  implement. For the avoidance of doubt, your BFS algorithm will be tested on the KN graphs.

Test via: python3.11  test_pathfinding.py  --graph  data/4N/one.graph  --bfs  --seed   [--viz]

Note that the --viz flag is optional (and triggers the visualizer to run) and  should be substituted with an integer.

Task 2.2:  Dijkstra’s Algorithm (3 marks)

BFS is nice; it is quite simple and it works well at finding the Gurkey when the graph is  unweighted.  However, Brisbane is a hilly city, and some paths are more expensive than  others; we’ll need to take this into account to find the true shortest path to the Gurkey. We also don’t necessarily know where the Gurkey will be, so it would be good to find the  shortest path from our current location to all possible locations.

Your goal is as follows. Given a weighted graph and a source node, return the cost of the lowest-cost path to all reachable nodes. If a node is not reachable (for instance, if the Gurkey has destroyed all of the bridges) then you should not return it in your list. Please see the type annotations for the specific details about what this function should return.

Test via: python3.11  test_pathfinding.py  --graph  data/POSW/one.graph  --dijkstra --seed  

Figure 4 A sketch of breadth-first search starting at vertex  B and searching for vertex  H. A queue keeps track of the next vertices to visit, and they are visited as they are dequeued.  A list can be used to track the order in which nodes are visited.

Note that it does not really make sense to use the --viz flag with Dijkstra, because the 4N graphs do not have edge weights (and the viz tool needs to use 4N graphs).

Figure 5 A sketch of Dijkstra’s algorithm.  See the code for the expected output format and structure.

Task 2.3:  Depth-First Search (2 marks  COMP7505 only)

Depth-First Search (DFS) operates very similarly to Breadth-First Search. However, instead of using a FIFO queue, it uses a LIFO stack. You must implement the dfs_traversal() stub (plus any additional data structures you may require); note that both the visited set, and the path, are expected to be returned. Please see the type annotations for the specific details about what these functions should return.

To make your results reproducible, you must push the unvisited neighbours in the order they are given to you from the get_neighbours() function.

Finally, while you can visualize DFS on the lattice graphs, you must ensure that your algorithms translate to graphs with arbitrary degree. This should be trivial to implement. For the avoidance of doubt, your DFS algorithm will be tested on the KN graphs.

Test via: python3.11  test_pathfinding.py  --graph  data/4N/one.graph  --dfs  --seed   [--viz]

Note that the --viz flag is optional (and triggers the visualizer to run) and  should be substituted with an integer.

Figure 6 A sketch of depth-first search starting at vertex B and searching for node I. A stack keeps track of the next vertices to visit, and they are visited as they are popped from the stack.  A list can be used to track the order in which nodes are visited.

F Task 3:  Problem Solving

Now that the mega Gurkey is back in the lab, we will need to conduct additional testing  to ensure such an event never happens again (well, at least until COMP3506/7505 2025). Unfortunately, Dr. Amongus has already been fired, so it is our job to help Barry Malloc  determine how this all happened in the first place.

Task 3.1:  Maybe Maybe Maybe (3 marks)

MallocLabs has a huge database of k-mers that have been sequenced throughout their many years of operation.  To determine which genomes may have been involved in the genetic modification of the Gurkey, we can simply compare the Gurkey genome to all genomes in the database to find out which ones match, and return those for further analysis. The problem, however, is that the database contains trillions of k-mers.

Our job is to create a fast and compact filtering algorithm that, given a list of database k-mers, D, and another list of query k-mers Q, returns a list of k-mers that from Q that are likely to be in D. We award more marks for having lower false positive rates; the maximum allowed false positive rate is 10%, and then we will measure at 5% and 1%. Note that lower false positive rates might come at higher time and space costs.

Test via: python3.11  test_problems .py  --maybe  --seed    --dbcount   --qcount    --k  

Figure 7 A sketch of Maybe3  – See the code for the expected output format and structure.

Task 3.2:  Dora and the Chin  Bicken (3 marks)

MallocLabs’ spies have recently discovered that their main competitor CallocLabs has hired Dr. Amongus, and are planning to release a giant Ibis named Chin Bicken to wreak havoc on MallocLabs HQ! Barry and the team need to get prepared. The head honchos at MallocLabs have decided on the following strategy:

d**; Chin Bicken will, at some point, attack the MallocLabs HQ;

d**; Since Chin Bicken is enormous, it may attack different parts of the building simultaneously; d**; At this time, MallocLabs will release a robot – Dora – which does the following:

1. It will receive as input an undirected graph  G where vertices represent rooms in MallocLabs HQ, and edges represent undamaged connections between rooms.

2. From its starting location, it will explore all reachable rooms of the building to collect genomic data left by the Chin Bicken.

3. This genomic data comes in the form. of special gene symbols, s, represented by a single character; there is one at each vertex of G.

4. Next, the robot builds a gene symbol frequency table T which maps each gene symbol s to its total frequency in G, denoted fs.

5. Once T is computed, the robot builds a minimum redundancy code via Huffman’s algorithm, resulting in a codebook CG  mapping each s to a codeword cs.

6. Finally, the robot receives a sequence L = ⟨s0, . . . , sn−1〉of n symbols, drawn from all symbols appearing in G. This sequence represents the specific body part of Chin Bicken that MallocLabs believes is its weak point. The robot will use CG  to encode all s ∈ L into one long bitvector B .  That is, B will hold the concatenation of the encoding of each symbol in L: cs0 cs1   · · · csn − 1 .

d**; Once the robot produces B, Barry can feed it into the GeneCoder6000 to develop a weapon to fend off the Chin Bicken.  Of course, Dora will need to be fast. It has to visit all vertices in the graph before Chin Bicken causes any further chaos, after all. You have been tasked to write the logic for Dora. Get to it!

python3.11  test_problems .py  --dora  --graph  data/KN/one.graph  --seed  

Figure 8 A sketch of Dora .  See the code for the expected output format and structure.

Task 3.3:  Chain Reaction (3 marks)

To progress further with the reconstruction of Dr.  Amongus’ cloning programme, Barry now needs to find what is called the optimal reaction compound. We are given n candidate compounds,  each of which is represented by a unique  ⟨x, y〉coordinate  based  on their reactivity in two specific dimensions of interest. Each compound also holds a floating point value known as the spike radius r.

Compound A is said to cause a reaction with compound B if the circle centered on ⟨xA , yA〉with radius r overlaps with the compound at ⟨xB , yB〉; however, reactions do not occur naturally — they must be triggered by some other reaction. When a compound reacts, any compound that it is reactive with it will also be triggered (and so on).

You are given one charged molecule to set off a chain reaction, and you must select the given compound i ∈ [0, n − 1] that will maximize the total number of compounds in the chain reaction. If there are ties, return the one with the smallest identifier.

Test via: python3.11  test_problems .py  --chain  --seed    --n  

Figure 9 A sketch of the Chain Reaction problem.  See the code for the expected output format and structure.

Task 3.4:  Lost in the Labyrinth (aka notably more k-cool) (2 marks)

The attack from CallocLabs compromised some of the building structure at MallocLabs HQ, and the team is concerned that the Gurkey might break free.  Barry would like to  build a labyrinth to contain the Gurkey, and has offers from various construction companies. However, he is concerned that some of these companies are trying to scam him, so we need  to help him to come up with an algorithm to determine whether a labyrinth can even be  constructed from each offer.

Each company treats the design of a labyrinth as a graph problem. They provide us with four integers: n, m, k, and c, where n is the number of vertices (|V |), m is the number of edges (|E|), k is the diameter of the graph, and c is the cost to produce it. From these four integers, we must determine if their offer is valid or not. A labyrinth is considered valid if it conforms to the following rules:

d**; It is a connected graph.

d**; It has no double edges or self loops.

d**; The largest shortest simple path between any two vertices v1  and v2   (the diameter) is at most k.  (In other words, if you found the shortest simple path between every pair of vertices, the diameter of the graph is the length of longest one of these.)

Given a list of offers, you must return the cheapest offer that can be constructed. If there are ties, return the one with the smallest identifier.

python3.11  test_problems .py  --labyrinth  --seed    --o  

請(qǐng)加QQ:99515681  郵箱:99515681@qq.com   WX:codinghelp

掃一掃在手機(jī)打開(kāi)當(dāng)前頁(yè)
  • 上一篇:代寫(xiě)IK2215、代做java程序語(yǔ)言
  • 下一篇:MDSB22代做、代寫(xiě)C++,Java程序設(shè)計(jì)
  • 無(wú)相關(guān)信息
    合肥生活資訊

    合肥圖文信息
    流體仿真外包多少錢(qián)_專(zhuān)業(yè)CFD分析代做_友商科技CAE仿真
    流體仿真外包多少錢(qián)_專(zhuān)業(yè)CFD分析代做_友商科
    CAE仿真分析代做公司 CFD流體仿真服務(wù) 管路流場(chǎng)仿真外包
    CAE仿真分析代做公司 CFD流體仿真服務(wù) 管路
    流體CFD仿真分析_代做咨詢(xún)服務(wù)_Fluent 仿真技術(shù)服務(wù)
    流體CFD仿真分析_代做咨詢(xún)服務(wù)_Fluent 仿真
    結(jié)構(gòu)仿真分析服務(wù)_CAE代做咨詢(xún)外包_剛強(qiáng)度疲勞振動(dòng)
    結(jié)構(gòu)仿真分析服務(wù)_CAE代做咨詢(xún)外包_剛強(qiáng)度疲
    流體cfd仿真分析服務(wù) 7類(lèi)仿真分析代做服務(wù)40個(gè)行業(yè)
    流體cfd仿真分析服務(wù) 7類(lèi)仿真分析代做服務(wù)4
    超全面的拼多多電商運(yùn)營(yíng)技巧,多多開(kāi)團(tuán)助手,多多出評(píng)軟件徽y1698861
    超全面的拼多多電商運(yùn)營(yíng)技巧,多多開(kāi)團(tuán)助手
    CAE有限元仿真分析團(tuán)隊(duì),2026仿真代做咨詢(xún)服務(wù)平臺(tái)
    CAE有限元仿真分析團(tuán)隊(duì),2026仿真代做咨詢(xún)服
    釘釘簽到打卡位置修改神器,2026怎么修改定位在范圍內(nèi)
    釘釘簽到打卡位置修改神器,2026怎么修改定
  • 短信驗(yàn)證碼 寵物飼養(yǎng) 十大衛(wèi)浴品牌排行 suno 豆包網(wǎng)頁(yè)版入口 目錄網(wǎng) 排行網(wǎng)

    關(guān)于我們 | 打賞支持 | 廣告服務(wù) | 聯(lián)系我們 | 網(wǎng)站地圖 | 免責(zé)聲明 | 幫助中心 | 友情鏈接 |

    Copyright © 2025 hfw.cc Inc. All Rights Reserved. 合肥網(wǎng) 版權(quán)所有
    ICP備06013414號(hào)-3 公安備 42010502001045

    国产人妻人伦精品_欧美一区二区三区图_亚洲欧洲久久_日韩美女av在线免费观看
    91好吊色国产欧美日韩在线| 中文字幕日韩一区二区三区不卡| 免费看污久久久| 欧美日韩视频免费| 欧美日韩精品免费观看| 日本欧美视频在线观看| 日本最新高清不卡中文字幕| 亚洲一卡二卡三卡| 亚洲精品国产系列| 午夜欧美大片免费观看| 日日摸天天爽天天爽视频| 日本午夜一区二区三区| 日韩av电影在线免费播放| 日本一区二区三区精品视频| 日本a级片电影一区二区| 日韩欧美国产免费| 欧美激情亚洲天堂| 国产日韩欧美在线播放| 97久久精品国产| 久久精品国产精品青草色艺| 视频在线一区二区| 国产精品久久视频| 精品国产aⅴ麻豆| 日韩一区免费观看| 欧美亚洲另类激情另类| 国产日韩亚洲欧美在线| 久久综合毛片| 久久精品视频va| 欧美日本亚洲视频| 色噜噜狠狠一区二区三区| 欧美深夜福利视频| 国产美女被下药99| 久久久久久中文字幕| 久久综合色影院| 日本午夜人人精品| 国产视频福利一区| 久久免费国产视频| 久久精品ww人人做人人爽| 国产精品麻豆va在线播放| 中文字幕免费在线不卡| 日本阿v视频在线观看| 国产日本欧美在线| 久久精品国产精品国产精品污 | 久久精品无码中文字幕| 国产精品高潮呻吟久久av黑人| 亚洲精品在线免费看| 欧美中文在线免费| 99高清视频有精品视频| 国产精品日日摸夜夜添夜夜av| 亚洲最大的av网站| 欧美在线激情网| 91精品久久久久久久| 国产精品精品久久久久久| 色乱码一区二区三在线看| 国产一区二区三区免费不卡 | 国产精品欧美在线| 岛国视频一区免费观看| 麻豆久久久av免费| 久久av综合网| 午夜免费福利小电影| 国产欧美日韩中文字幕| 国产精品天天av精麻传媒| 亚洲熟妇无码一区二区三区| 黄色免费视频大全| 国产成人一区二区三区| 在线不卡日本| 国产一区二区四区| 国产精品美女久久久久av福利| 欧美一级淫片播放口| 成人精品水蜜桃| 久久福利视频导航| 女同一区二区| 久久久久久久久久国产| 亚洲激情电影在线| 成人3d动漫一区二区三区| 欧美精品生活片| 精品无人区一区二区三区| www.日韩视频| 日韩av免费网站| 久久露脸国产精品| 亚洲精品在线视频观看| 99视频日韩| 亚洲伊人第一页| 国产精品综合网站| 美日韩精品免费观看视频| 精品视频一区二区三区四区| 国产精品免费一区| 欧美一级黄色影院| 久久国产主播精品| 秋霞成人午夜鲁丝一区二区三区 | 亚洲高清在线观看一区| 成人福利网站在线观看11| 中文字幕欧美日韩一区二区三区| 国产美女主播一区| 中文字幕中文字幕一区三区| 91蜜桃网站免费观看| 天天成人综合网| 久久波多野结衣| 欧美性视频在线播放| 国产精品福利在线观看| 国产午夜精品视频一区二区三区| 国产精品动漫网站| 成人在线精品视频| 亚洲不卡中文字幕无码| 成人毛片网站| 欧美一级片中文字幕| 久久久久久久久久久久久久一区| 欧美在线性视频| 国产精品久久久久久久久久小说 | 国产第一页视频| 日本成人黄色免费看| 日韩日本欧美亚洲| 欧美性视频精品| 国产精品免费一区二区三区四区| 蜜桃视频在线观看91| 欧美日韩ab片| 国产精品99久久久久久白浆小说 | 亚洲www在线观看| 久久久久久久久久久综合| 欧美成人一区二区在线| 中文字幕欧美日韩一区二区| 国产激情美女久久久久久吹潮| 欧美精品二区三区四区免费看视频| 久久国产精品电影| 91久久精品视频| 欧美一级大片在线观看| 久久在精品线影院精品国产| 91福利视频网| 国语对白做受xxxxx在线中国| 一卡二卡3卡四卡高清精品视频| 久久国产精品-国产精品| 国模私拍视频一区| 亚洲丰满在线| 国产精品美女久久| 久久久一二三四| 国产欧美日韩视频| 日本不卡免费新一二三区| 精品久久久久久无码国产| 国产传媒一区| 国产美女搞久久| 欧洲成人免费视频| 中文字幕久久一区| 国产成人精品在线| 91久久偷偷做嫩草影院| 含羞草久久爱69一区| 岛国视频一区免费观看 | 亚洲不卡中文字幕| 国产精品久久久久久久久久久久| 91麻豆国产精品| 国产尤物91| 欧美一级黑人aaaaaaa做受| 亚洲av综合色区| 欧美精品在线免费观看| 久久国产精品免费观看| 丰满少妇久久久| 国模无码视频一区二区三区| 日韩欧美亚洲天堂| 天堂av在线中文| 亚洲一区二区不卡视频| 国产精品久久久久9999小说 | 欧美精品在线免费| 日韩在线不卡视频| 久久草.com| 久久久99爱| 91成人免费视频| 成人久久18免费网站漫画| 狠狠色伊人亚洲综合网站色| 日韩av大片在线| 动漫3d精品一区二区三区| 中文精品视频一区二区在线观看| 国产精品露脸自拍| 久久精品国产亚洲精品2020| 久久精品国产精品亚洲精品色| 91九色在线视频| 性欧美激情精品| 欧美一区二区色| 天堂√在线观看一区二区| 中文字幕在线乱| 宅男一区二区三区| 欧美xxxx黑人又粗又长密月| 欧美性资源免费| 人人澡人人澡人人看欧美| 日本一本a高清免费不卡| 午夜欧美性电影| 午夜啪啪福利视频| 天堂精品一区二区三区| 色噜噜狠狠一区二区三区| 日韩在线视频在线观看| 日韩av免费网站| 青青青国产精品一区二区| 日韩美女免费线视频| 欧美在线视频a| 欧美 日韩 国产精品| 国内精品久久国产| 国产无限制自拍| 国产精品自拍偷拍| 国产狼人综合免费视频| 91精品视频免费看| 国产成人精品久久二区二区91| 国产激情视频一区|