Finding an enclosing interval

Posted on Friday 8 June 2007

A question often asked in interviews is: what’s the best way to store a set? There are many different ways to store well-ordered data so that it can be queried quickly. Many people find that a hash table gives them the best performance characteristics, so much so that if you are in an interview and answer with anything else, you will immediately raise the suspicions of the interviewer. However, assuming you have a good hash function, a hash table still has one key flaw: it really doesn’t tell you anything about your relative neighbors. This means that you can’t easily extract an ordered list out of a hash table. You could query all possible keys in order, but this will give you abysmal performance. Furthermore, if you use e.g. a dictionary (strcmp) ordering of strings, you will have an infinite number of keys between any two finite keys. That makes exhaustive search impossible.

But besides extracting an ordered list, there are other uses for having neighbor access. Suppose, for example, you had a set of non-overlapping time intervals which represent different policies in effect at Company X. Each time interval has some starting time as well as an ending time. Now, given a moment in time, you would like to find the time interval that contains it, if there is one; this corresponds to the policy which was in effect at that time. (Assume for now that if the interval starts at a query moment, it contains that moment.) What is a good data structure which would allow you to efficiently add new time intervals and query moments in time intervals?

Think for a few minutes before reading below…

Actually, any sort of balanced binary tree suffices for both O(log n) insert and query performance. The query will find the latest interval start which is less than or equal to the query moment. It will then verify that the query moment falls before the end, and will fail if it doesn’t.

How does that query work? Presumably you know how to search for an element q in a binary tree tree:

  • let e = tree.root
  • While e != null:
    • if e < q: // Current element less than query element, so look at larger elements
      • e := e.right
    • else if e > q: // Current element greater than query element, so look at smaller elements
      • e := e.left
    • return true // e == q
  • return false

Note: The symbol “:=” means assignment, if you haven’t seen it before. Functional programmers hate assignment and they will write the above in a tail-recursive manner.

In this algorithm, inductively, e contains an element on the path from the tree’s root to q (or where q would be if it existed). The root is on the path. Given the element in some path, we can find the next element by either looking in the set of all elements reachable on this path which are larger, or the set of all elements reachable on this path which are smaller.

To find the largest element which is smaller than or equal to a given element q:

  • let e = tree.root
  • let x = null
  • While e != null:
    • if e < q:
      • x := e
      • e := e.right
    • else if e > q:
      • e := e.left
    • return e // e == q
  • return x

In this algorithm, x represents the largest element we’ve seen so far which is less than q. This is hopefully fairly easy to see: we store e in x if and only if it is smaller than q. Since this algorithm follows the same path as the search algorithm, the only thing left to realize is that, in fact, the largest element in the set which is less than or equal to e (let’s call that element y) will be present on the path to e. That’s the key to the algorithm.

So, after all that, we’ve finally gotten to what you might think of as the crux of the algorithm, somewhat analogous to the meat patty found deep within the layers of condiments of an overly dressed Fuddruckers burger (you can only blame yourself there, though). Take a breath and make sure you understand why this is so important. After all, we’re only looking at a tiny, log-sized slice of the set, but are making a statement about the whole thing.

The induction hypothesis is that either we have encountered y, or y is contained in the set we recurse on. This is surely true for the root, since it contains all elements.

Inductively, when examining e and deciding which way to go, consider the set that we didn’t choose. If e < q, then the set to the left of e is smaller than e, but e < q, so e itself is a better choice than anything to the left. We therefore say that e is “good” and we remember it. If there is a better choice, it is to the right, so we proceed to recurse to the right. On the other hand, if e > q, then e is not a good choice because it is too big, and furthermore anything to the right will be even bigger. Therefore, we recurse on the left, where y must be if it exists.

What we have shown is already enough for a good algorithm. That algorithm would simply be to remember the biggest thing we’ve seen which is smaller than q. But the above algorithm is a little better; it always picks the last thing we’ve seen which is smaller than q and doesn’t bother to compare it to the last one we picked. The reason this works becomes clear if you examine what we observed earlier. Whenever we see a good e, we always recurse to the bigger set. But that means if we see another good e, it must be bigger and therefore better than the last good e we saw.

How about using this algorithm with your favorite data structure libraries? Java has a similar algorithm in TreeMap as a method called “highestLessThan”. This method isn’t exposed (who knows why not?), but you can activate it by calling headMap. (Or, use a TreeSet which internally uses a TreeMap.) The Java algorithm is about twice as slow as it needs to be, though, because it does two tree traversals, first to find an element and then to find its predecessor. C++ STL does the above algorithm in the form of upper_bound (at least in the SGI implementation). It’s also worth mentioning a typical SQL database. Suppose you had some table interval where each row contained an interval (start, end). Set up a descending index on start: create unique index foo on interval (start desc) This essentially gives you both a balanced tree and a singly linked list in the descending direction. Then you can select max(start) from interval where start <= ?. This will get you the start of the interval, which you can then use to query the rest. I’m not really a DB expert, so someone else can fill me in. As for other languages… fill me in!

There are some other directions we could go with this. If intervals could overlap, this adds complications. If we want the interval to start strictly before the moment in time, this changes the algorithm a little. But I have to stop somewhere.


213 Comments for 'Finding an enclosing interval'

  1.  
    June 8, 2007 | 10:05 am
     

    I think you should stress the non-overlapping part of this problem. I overlooked that single word and was trying to reengineer interval trees to answer the queries. Then I was confused in reading your solution, because it doesn’t handle the non-disjoint case.

  2.  
    Chris Pine
    June 8, 2007 | 11:06 pm
     

    +1 (I also missed the non-overlapping requirement.)

  3.  
    Arun RV
    June 9, 2007 | 10:20 am
     

    In C++, this problem is easily solved y using the set STL container and redefining operator
    #include
    #include
    #include

    using namespace std;

    struct Interval
    {
    int m_Start, m_End;

    Interval(int p_S, int p_E)
    {
    if ( p_S > p_E )
    std::swap( p_S, p_E );
    m_Start = p_S;
    m_End = p_E;
    }

    bool operator iSet;
    while(1)
    {
    string s1, s2;
    cout > s1 >> s2;
    if ( s1 == “quit” || s2 == “quit” )
    break;

    int s = atoi( s1.c_str() );
    int e = atoi( s2.c_str() );

    Interval i(s, e);
    set::iterator itr = iSet.find( i );
    if ( itr != iSet.end() )
    {
    cout

  4.  
    Arun RV
    June 9, 2007 | 10:22 am
     

    The submission didn’t quite work. Wish a blog on algorithms would accept code snippets.

  5.  
    Arun RV
    June 9, 2007 | 10:25 am
     

    Basically, use the set container, and overload the less-than operator of struct Interval to mean: I1

  6.  
    Algo Blog
    June 10, 2007 | 12:23 am
     

    By popular demand, I added a “code” button and the ability to preview comments to make sure they look OK. You can either enclose your stuff in <code> or you can use the “c” button. It seems to work OK. Here’s another example:
    #include <foo.h>
    for (int i = 0; i < n; i++) {
      foo();
    }

  7.  
    Arun RV
    June 10, 2007 | 7:31 am
     

    Thanks!

    I think you can solve the problem by defining two intervals as “equal” if they have a non-null intersection. I1 is less than I2 if I1.start and I1.end are less than I2.start. This way, you could just use a normal tree search to find whether the interval (a, a) intersects with an existing interval in the tree.

  8.  
    October 1, 2007 | 2:23 pm
     

    6e2550827b6c0625c0e2…

    6e2550827b6c…

  9.  
    October 16, 2007 | 5:53 pm
     

    effexor impotence…

    news…

  10.  
    October 16, 2007 | 5:59 pm
     

    propecia…

    news…

  11.  
    October 17, 2007 | 5:12 pm
     

    ativan without prescription…

    news…

  12.  
    October 17, 2007 | 5:15 pm
     

    nexium…

    news…

  13.  
    October 17, 2007 | 5:21 pm
     

    buy adderall…

    news…

  14.  
    October 17, 2007 | 5:30 pm
     

    vicodin…

    news…

  15.  
    October 18, 2007 | 9:55 pm
     

    zyban abuse…

    news…

  16.  
    October 19, 2007 | 5:29 pm
     

    ephedra yellow jackets…

    news…

  17.  
    October 19, 2007 | 5:36 pm
     

    effects of lexapro…

    news…

  18.  
    October 19, 2007 | 6:05 pm
     

    seroquel anger…

    news…

  19.  
    October 19, 2007 | 6:10 pm
     

    lamisil digger figure…

    news…

  20.  
    October 20, 2007 | 5:16 pm
     

    clomid success rates…

    news…

  21.  
    October 20, 2007 | 5:59 pm
     

    protonix 40mg…

    news…

  22.  
    October 20, 2007 | 6:05 pm
     

    acyclovir dosages…

    news…

  23.  
    October 21, 2007 | 5:13 pm
     

    cipro…

    news…

  24.  
    October 21, 2007 | 5:15 pm
     

    alprazolam…

    news…

  25.  
    October 21, 2007 | 9:27 pm
     

    aded19275004a0c17f08…

    aded19275004…

  26.  
    October 22, 2007 | 5:06 pm
     

    neurontin side effects…

    news…

  27.  
    October 22, 2007 | 5:06 pm
     

    does metformin cause weight loss…

    news…

  28.  
    October 22, 2007 | 5:09 pm
     

    amoxicillin side effects…

    news…

  29.  
    October 22, 2007 | 5:13 pm
     

    tramadol hcl…

    news…

  30.  
    October 22, 2007 | 5:17 pm
     

    cheapest tramadol…

    news…

  31.  
    October 22, 2007 | 5:41 pm
     

    synthroid problems…

    news…

  32.  
    October 22, 2007 | 5:45 pm
     

    norco bank robbery documentary…

    news…

  33.  
    October 22, 2007 | 5:54 pm
     

    adderall…

    news…

  34.  
    October 22, 2007 | 6:00 pm
     

    generic tylenol recall…

    news…

  35.  
    October 23, 2007 | 6:13 pm
     

    tylenol 3…

    news…

  36.  
    October 23, 2007 | 6:24 pm
     

    flomax and homepage…

    news…

  37.  
    October 23, 2007 | 6:30 pm
     

    bupropion side effects…

    news…

  38.  
    October 23, 2007 | 7:22 pm
     

    clomid babies…

    news…

  39.  
    October 24, 2007 | 5:18 pm
     

    buy percocet online…

    news…

  40.  
    October 24, 2007 | 5:30 pm
     

    does meridia work…

    news…

  41.  
    October 24, 2007 | 5:32 pm
     

    fioricet and blood work…

    news…

  42.  
    October 24, 2007 | 6:04 pm
     

    prozac side effects…

    news…

  43.  
    October 24, 2007 | 6:28 pm
     

    hydrocodone apap 5 500…

    news…

  44.  
    October 24, 2007 | 6:52 pm
     

    ativan treatmenr for seizures…

    news…

  45.  
    October 24, 2007 | 6:56 pm
     

    nexium side effects…

    news…

  46.  
    October 24, 2007 | 7:02 pm
     

    cipro flatulence…

    news…

  47.  
    October 24, 2007 | 7:06 pm
     

    lorazepam side effects…

    news…

  48.  
    October 25, 2007 | 5:28 pm
     

    phentermine diet pills…

    news…

  49.  
    October 25, 2007 | 5:38 pm
     

    ephedrine side effects…

    news…

  50.  
    October 25, 2007 | 6:27 pm
     

    interactions between elavil and ephedrine…

    news…

  51.  
    October 25, 2007 | 6:31 pm
     

    diflucan birth control pills…

    news…

  52.  
    October 25, 2007 | 6:46 pm
     

    alcohol and zoloft…

    news…

  53.  
    October 25, 2007 | 6:55 pm
     

    valium side effects…

    news…

  54.  
    October 26, 2007 | 5:16 pm
     

    prednisone…

    news…

  55.  
    October 26, 2007 | 5:17 pm
     

    adderall xr…

    news…

  56.  
    October 26, 2007 | 5:48 pm
     

    oxycodone stomach problems…

    news…

  57.  
    October 26, 2007 | 6:19 pm
     

    zocor eye…

    news…

  58.  
    October 26, 2007 | 6:25 pm
     

    buy norco online…

    news…

  59.  
    October 26, 2007 | 6:32 pm
     

    oxycodone extraction iv…

    news…

  60.  
    October 26, 2007 | 6:47 pm
     

    cheapest cialis…

    news…

  61.  
    October 26, 2007 | 8:25 pm
     

    valtrex and weight loss…

    news…

  62.  
    October 26, 2007 | 8:33 pm
     

    ephedra weight loss products…

    news…

  63.  
    October 27, 2007 | 5:31 pm
     

    metformin more effective than avandia…

    news…

  64.  
    October 27, 2007 | 5:35 pm
     

    vicodin withdrawal…

    news…

  65.  
    October 27, 2007 | 6:39 pm
     

    vicodin side effects…

    news…

  66.  
    October 27, 2007 | 6:45 pm
     

    prednisone withdrawal…

    news…

  67.  
    October 27, 2007 | 6:51 pm
     

    alprazolam south america…

    news…

  68.  
    October 27, 2007 | 7:02 pm
     

    buy valtrex online…

    news…

  69.  
    October 27, 2007 | 8:58 pm
     

    zoloft and breastfeeding…

    news…

  70.  
    October 28, 2007 | 5:26 pm
     

    danger of ephedrine…

    news…

  71.  
    October 28, 2007 | 5:27 pm
     

    ritalin without prescription…

    news…

  72.  
    October 28, 2007 | 6:53 pm
     

    side effects for valtrex…

    news…

  73.  
    October 28, 2007 | 6:59 pm
     

    valtrex…

    news…

  74.  
    October 28, 2007 | 7:08 pm
     

    doxycycline dosage…

    news…

  75.  
    October 28, 2007 | 9:08 pm
     

    zoloft generic…

    news…

  76.  
    October 30, 2007 | 6:09 pm
     

    online pharmacy oxycodone…

    news…

  77.  
    October 30, 2007 | 6:12 pm
     

    half life of elavil…

    news…

  78.  
    November 6, 2007 | 6:11 pm
     

    valtrex side effects…

    news…

  79.  
    November 6, 2007 | 6:20 pm
     

    doxycycline side effects…

    news…

  80.  
    November 6, 2007 | 6:29 pm
     

    alprazolam from mexico…

    news…

  81.  
    November 7, 2007 | 6:22 pm
     

    hydroxycut with ephedra…

    news…

  82.  
    November 8, 2007 | 6:48 pm
     

    buy carisoprodol…

    news…

  83.  
    November 8, 2007 | 6:50 pm
     

    carisoprodol fedex cod…

    news…

  84.  
    November 8, 2007 | 7:27 pm
     

    zoloft sexual side effects…

    news…

  85.  
    November 9, 2007 | 6:45 pm
     

    oxycodone…

    news…

  86.  
    November 10, 2007 | 4:20 am
     

    tchnvrbi…

    tchnvrbi…

  87.  
    November 10, 2007 | 9:09 pm
     

    long term use of percocet…

    news…

  88.  
    November 10, 2007 | 9:14 pm
     

    percocet 93-490…

    news…

  89.  
    November 10, 2007 | 9:16 pm
     

    amoxicillin…

    news…

  90.  
    November 12, 2007 | 5:50 pm
     

    valtrex medication…

    news…

  91.  
    November 12, 2007 | 6:58 pm
     

    doxycycline taken with desonide…

    news…

  92.  
    November 13, 2007 | 11:47 pm
     

    doxycycline hyclate…

    news…

  93.  
    November 14, 2007 | 5:06 pm
     

    ephedra products…

    news…

  94.  
    November 14, 2007 | 7:24 pm
     

    doxycycline 100mg…

    news…

  95.  
    November 14, 2007 | 7:27 pm
     

    doxycycline…

    news…

  96.  
    November 15, 2007 | 5:05 pm
     

    buy ephedra online…

    news…

  97.  
    November 15, 2007 | 8:40 pm
     

    doxycycline pleural…

    news…

  98.  
    November 15, 2007 | 8:42 pm
     

    oxycodone extraction…

    news…

  99.  
    November 16, 2007 | 5:05 pm
     

    buy valtrex without prescription…

    news…

  100.  
    November 18, 2007 | 5:05 pm
     

    ephedra pills…

    news…

  101.  
    November 18, 2007 | 5:21 pm
     

    what is lorazepam…

    news…

  102.  
    November 18, 2007 | 9:16 pm
     

    amoxicillin trihydrate…

    news…

  103.  
    November 18, 2007 | 9:21 pm
     

    forex…

    news…

  104.  
    November 19, 2007 | 6:50 pm
     

    side effects of zoloft…

    news…

  105.  
    November 19, 2007 | 7:00 pm
     

    propecia generic…

    news…

  106.  
    November 20, 2007 | 6:41 pm
     

    pill propecia…

    news…

  107.  
    November 22, 2007 | 5:33 pm
     

    ephedra…

    news…

  108.  
    November 24, 2007 | 5:45 pm
     

    ephedra diet pills…

    news…

  109.  
    November 27, 2007 | 10:04 pm
     

    ‘08 candidates begin to firm…

    WASHINGTON — Positions on the country’s direction at home and abroad are starting to take shape in the blur of…

  110.  
    November 28, 2007 | 6:17 pm
     

    N Korea Talks Resume After…

    N Korea Talks Resume After Funds ReleasedBuzzle, CA -1 hour ago… implementing measures to shut down North Korea’s nuclear facilities within 60…

  111.  
    December 1, 2007 | 12:28 am
     

    Run for a reason -…

    Run for a reasonTallahassee.com, FL -Apr 5, 2007… a “Haiku at Hai Noon” poetry contest and a meet-the-author signing with Martha Lou…

  112.  
    December 1, 2007 | 5:37 pm
     

    propecia side effects…

    news…

  113.  
    December 2, 2007 | 3:24 am
     

    Let us trust our people…

    Let us trust our peopleThe Daily Star, Bangladesh -1 hour agoLet us concentrate more on salvaging the nation from the evil of…

  114.  
    December 2, 2007 | 6:37 pm
     

    propecia online uk…

    news…

  115.  
    December 2, 2007 | 6:47 pm
     

    propecia side effects fre…

    news…

  116.  
    December 3, 2007 | 11:25 am
     

    HIGHLIGHTS (Financial Express)…

    Robots On STAR Movies International Monday at 7-00 pm Even in a world populated entirely by mechanical beings Rodney Copperbottom…

  117.  
    December 3, 2007 | 6:32 pm
     

    forex trading seminar az…

    news…

  118.  
    December 3, 2007 | 6:34 pm
     

    micro forex trading…

    news…

  119.  
    December 3, 2007 | 6:35 pm
     

    forex training…

    news…

  120.  
    December 4, 2007 | 5:57 am
     

    Community college presidents approved -…

    Community college presidents approvedMontgomery Advertiser, AL -6 hours agoExley received his Ph.D. at the University of Texas at Austin and has worked…

  121.  
    December 4, 2007 | 6:34 pm
     

    propecia and online drugs stores…

    news…

  122.  
    December 7, 2007 | 6:06 pm
     

    tramadol side effects…

    news…

  123.  
    December 9, 2007 | 5:06 pm
     

    zoloft side effects…

    news…

  124.  
    December 10, 2007 | 5:26 pm
     

    buy propecia…

    news…

  125.  
    December 11, 2007 | 4:50 am
     

    Off the radar at swim…

    Off the radar at swim showsMiami Herald, FL -Jul 17, 2007Jessica Simpson may represent the height of pop culture vapidness, but she…

  126.  
    December 11, 2007 | 5:42 pm
     

    phentermine…

    news…

  127.  
    December 11, 2007 | 5:50 pm
     

    tramadol hydrochloride…

    news…

  128.  
    December 12, 2007 | 6:27 pm
     

    phentermine online…

    news…

  129.  
    December 12, 2007 | 6:33 pm
     

    discount phentermine…

    news…

  130.  
    December 13, 2007 | 6:51 pm
     

    percocet dependency…

    news…

  131.  
    December 14, 2007 | 12:22 am
     

    Home Developers Target Growing Hispanic…

    Ferman Gonzales grew up on San Antonio’s south side, part of a large Hispanic community where developers used to be…

  132.  
    December 14, 2007 | 12:25 am
     

    COMPLETE TNA SACRIFICE 2007 COVERAGE:…

    Welcome to PWInsider.com’s live coverage of TNA Sacrifice. This will be the final PPV where TNA uses the NWA letters…

  133.  
    December 14, 2007 | 1:53 pm
     

    Cellphone revolution has people talking…

    In a country where most people live without paved roads, running water or even electricity, there’s one modern convenience that…

  134.  
    December 15, 2007 | 5:10 pm
     

    propecia pill…

    news…

  135.  
    December 17, 2007 | 11:12 am
     

    Vikings vs. Philadelphia: Just a…

    Vikings vs. Philadelphia: Just a phone call awayMinneapolis Star Tribune (subscription), MN -Oct 27, 2007When Childress looks across the field, he will…

  136.  
    December 17, 2007 | 5:06 pm
     

    zoloft…

    news…

  137.  
    December 19, 2007 | 7:32 pm
     

    Hunting for Treasure - Press-Enterprise…

    Hunting for TreasurePress-Enterprise (subscription), CA -Aug 9, 2007All the galleries contributed to the treasure hunt. “Each of the galleries was responsible to…

  138.  
    December 19, 2007 | 9:16 pm
     

    Courier News Online - PISCATAWAY:…

    The Piscataway Public Library continues its Film Movement Series, a presentation of award-winning, first-run, independent and foreign films, with a…

  139.  
    December 21, 2007 | 6:30 am
     

    Crocs, Dragons skinned - Adelaidenow…

    Crocs, Dragons skinnedAdelaidenow, Australia -22 hours agoBaby Shaq grabbed 18 boards against the Kings, swatted a few shots and got called for…

  140.  
    December 21, 2007 | 9:37 pm
     

    He is still the Chairman…

    He is still the Chairman of the Wampanoag Tribe of MashpeeCape Cod Today, MA -4 hours agoA law enforcement source told me…

  141.  
    December 21, 2007 | 11:48 pm
     

    Rugged, fanless vehicle PC runs…

    — Aug. 20, 2007 — Acrosser has introduced a compact, fanless computer aimed at the harsh environments found in trucks,…

  142.  
    December 23, 2007 | 5:28 pm
     

    The disturbing case of Izhar…

    The disturbing case of Izhar Ul-Haque: your laws at workCrikey (subscription), Australia -Nov 12, 2007The decision handed down by NSW Supreme Court…

  143.  
    December 23, 2007 | 5:56 pm
     

    cheap tramadol…

    news…

  144.  
    December 24, 2007 | 1:49 am
     

    Spin sends chill through English…

    Spin sends chill through English spineIndian Express, India -Aug 19, 2007The met department has predicted another wet day tomorrow, but luckily, the…

  145.  
    December 24, 2007 | 6:04 pm
     

    California Manufacturers See 5.25% Factory…

    California Manufacturers See 5.25% Factory Drop in 2006; 1.4% Drop …PCB007 (press release), OR -2 hours agoVisitors to http://www.mnileads.commay generate custom…

  146.  
    December 24, 2007 | 7:03 pm
     

    ephedrine hcl…

    news…

  147.  
    December 25, 2007 | 6:48 pm
     

    biotek ephedrine…

    news…

  148.  
    December 26, 2007 | 7:24 am
     

    WWII as only Ken Burns…

    WWII as only Ken Burns can tell the storySan Francisco Chronicle,  USA -Sep 21, 2007You can download Firefox at getfirefox.com. The…

  149.  
    December 27, 2007 | 6:14 pm
     

    tramadol…

    news…

  150.  
    December 28, 2007 | 1:58 am
     

    Nigeria: Liberation of the Naira…

    Nigeria: Liberation of the Naira by the Central BankAllAfrica.com, Washington -Aug 24, 2007The spraying of money on occasions such as wedding ceremonies,…

  151.  
    December 28, 2007 | 11:43 am
     

    ICSA STC Intercollegiate Offshore Regatta…

    ICSA STC Intercollegiate Offshore RegattaSail World, Australia -17 hours agoIn addition to holding various prestigious offshore racing events (among them the Fort…

  152.  
    December 28, 2007 | 7:05 pm
     

    percocet…

    news…

  153.  
    December 29, 2007 | 5:12 pm
     

    Marketplace gets thumbs-up for customer…

    Shana Shriber says she is thrilled that her commute for shopping and dining is just a two-mile trip even though…

  154.  
    December 29, 2007 | 7:19 pm
     

    amoxicillin for acne…

    news…

  155.  
    December 29, 2007 | 7:20 pm
     

    amoxicillin no prescription…

    news…

  156.  
    December 29, 2007 | 7:21 pm
     

    amoxicillin dosage…

    news…

  157.  
    December 29, 2007 | 7:30 pm
     

    dosage for valtrex…

    news…

  158.  
    December 31, 2007 | 5:55 am
     

    Abstinence Rally Held At Battlefield…

    Stop hatin’ on the waitin’. That was the theme of today’s youth abstinence rally in Jackson. Nearly 200 people gathered…

  159.  
    December 31, 2007 | 6:52 pm
     

    ephedrine weight loss products…

    news…

  160.  
    December 31, 2007 | 6:54 pm
     

    vaspro ephedrine…

    news…

  161.  
    December 31, 2007 | 6:57 pm
     

    buy vicodin without script…

    news…

  162.  
    January 1, 2008 | 11:34 pm
     

    Duck diversity - Wyoming Tribune…

    Duck diversityWyoming Tribune, WY -17 hours agoThere are a couple unidentifiable ducks at Sloan’s Lake that are the offspring of domestic white…

  163.  
    January 2, 2008 | 6:02 am
     

    Recreation, senior centers slated for…

    Recreation, senior centers slated for opening by AprilKilleen Daily Herald, TX -8 hours agoThe senior center will include a covered drop-off area,…

  164.  
    January 2, 2008 | 5:17 pm
     

    percocet online…

    news…

  165.  
    January 3, 2008 | 6:37 pm
     

    vicodin detox…

    news…

  166.  
    January 3, 2008 | 6:38 pm
     

    amoxicillin acne…

    news…

  167.  
    January 3, 2008 | 7:12 pm
     

    Hacking into iPhones, worming into…

    Hacking into iPhones, worming into PCsDaily Breeze, CA -Aug 30, 2007A new Trojan worm is being spread via e-mail this month,…

  168.  
    January 4, 2008 | 2:08 am
     

    1721095184…

    1721095184…

  169.