#include <bits/stdc++.h>
using namespace std;
const long double PI = acos(-1);
pair<long double, long double> sum(pair<long double, long double> a,
                                   pair<long double, long double> b) {
  return {a.first + b.first, a.second + b.second};
}
long double cross(pair<long double, long double> a,
                  pair<long double, long double> b) {
  return a.first * b.second - b.first * a.second;
}
pair<long double, long double> prod(long double k,
                                    pair<long double, long double> a) {
  return {k * a.first, k * a.second};
}
pair<long double, long double> com(vector<pair<long double, long double> > &v) {
  long double x = 0, y = 0, A = 0;
  for (int i = 1; i < v.size() - 1; ++i) {
    long double a =
        (v[i].first - v[0].first) * (v[i + 1].second - v[0].second) -
        (v[i].second - v[0].second) * (v[i + 1].first - v[0].first);
    a /= 2;
    x += a * (v[0].first + v[i].first + v[i + 1].first) / 3;
    y += a * (v[0].second + v[i].second + v[i + 1].second) / 3;
    A += a;
  }
  return {x / A, y / A};
}
long double dist(pair<long double, long double> a,
                 pair<long double, long double> b) {
  long double dx = a.first - b.first;
  long double dy = a.second - b.second;
  return sqrt(dx * dx + dy * dy);
}
int main() {
  cin.sync_with_stdio(0);
  cin.tie(0);
  int n, q;
  cout << setprecision(20);
  cin >> n >> q;
  vector<pair<long double, long double> > poly(n);
  for (int i = 0; i < n; ++i) {
    cin >> poly[i].first >> poly[i].second;
  }
  pair<long double, long double> c = com(poly);
  vector<pair<pair<long double, long double>, pair<long double, long double> > >
      v(n);
  for (int i = 0; i < n; ++i) {
    v[i].first = {dist(c, poly[i]), atan2((poly[i].second - c.second),
                                          (poly[i].first - c.first))};
    v[i].second = {poly[i].first - c.first, poly[i].second - c.second};
  }
  bool first = 1;
  pair<int, int> cur{0, 1};
  pair<pair<long double, long double>, pair<long double, long double> > cc{
      poly[0], poly[1]};
  pair<long double, long double> center;
  long double theta;
  while (q--) {
    int type;
    cin >> type;
    if (type == 1) {
      int f, t;
      cin >> f >> t;
      --f;
      --t;
      int m;
      pair<long double, long double> top;
      if (f == cur.first) {
        m = cur.second;
        top = cc.second;
      } else {
        m = cur.first;
        top = cc.first;
      }
      center = {top.first, top.second - v[m].first.first};
      theta = PI / 2 - v[m].first.second;
      pair<long double, long double> other = {
          v[t].second.first * cos(theta) - v[t].second.second * sin(theta) +
              center.first,
          v[t].second.first * sin(theta) + v[t].second.second * cos(theta) +
              center.second};
      cur = {m, t};
      cc = {top, other};
      first = 0;
    } else {
      int t;
      cin >> t;
      --t;
      if (first) {
        cout << poly[t].first << ' ' << poly[t].second << '\n';
      } else {
        cout << v[t].second.first * cos(theta) -
                    v[t].second.second * sin(theta) + center.first
             << ' '
             << v[t].second.first * sin(theta) +
                    v[t].second.second * cos(theta) + center.second
             << '\n';
      }
    }
  }
}
