#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) {
  auto i = v.begin(), end = v.end(), j = end - 1;
  auto ss = v.begin();
  pair<long double, long double> res{0, 0};
  long double A = 0;
  for (; i != end; j = i++) {
    pair<long double, long double> a = *i, b = *j;
    a.first -= ss->first;
    a.second -= ss->second;
    b.first -= ss->first;
    b.second -= ss->second;
    res = sum(res, prod(cross(b, a), sum(a, b)));
    A += cross(b, a);
  }
  return {res.first / A / 3 + ss->first, res.second / A / 3 + ss->second};
}
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<long double, long double> > v(n);
  for (int i = 0; i < n; ++i) {
    v[i].first = dist(c, poly[i]);
    v[i].second = atan2((poly[i].second - c.second), (poly[i].first - c.first));
  }
  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};
      theta = PI / 2 - v[m].second;
      pair<long double, long double> other = {
          v[t].first * cos(theta + v[t].second) + center.first,
          v[t].first * sin(theta + v[t].second) + 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].first * cos(theta + v[t].second) + center.first << ' '
             << v[t].first * sin(theta + v[t].second) + center.second << '\n';
      }
    }
  }
}
